* please see the file GPL in the top level source directory.
*/
-/*
- * This module either be compiled into Mutt, or it can be
- * built as a separate program. For building it
- * separately, define the DL_STANDALONE preprocessor
- * macro.
- */
-
#if HAVE_CONFIG_H
# include "config.h"
#endif
#include <getopt.h>
#endif
-#ifdef DL_STANDALONE
-# include "reldate.h"
-#endif
-
#define MAXLINKS 1024 /* maximum link depth */
-#ifdef DL_STANDALONE
-
# define LONG_STRING 1024
# define MAXLOCKATTEMPT 5
-# define strfcpy(A,B,C) strncpy (A,B,C), *(A+(C)-1)=0
-
# ifdef USE_SETGID
# ifdef HAVE_SETEGID
extern int snprintf (char *, size_t, const char *, ...);
# endif
-#else /* DL_STANDALONE */
-
-# ifdef USE_SETGID
-# error Do not try to compile dotlock as a mutt module when requiring egid switching!
-# endif
-
-# include "mutt.h"
-# include "mx.h"
-
-#endif /* DL_STANDALONE */
+#include <lib-lib/str.h>
static int DotlockFlags;
static int Retry = MAXLOCKATTEMPT;
-#ifdef DL_STANDALONE
static char *Hostname;
-#endif
#ifdef USE_SETGID
static gid_t UserGid;
static int dotlock_check_stats (struct stat *, struct stat *);
static int dotlock_dispatch (const char *, int fd);
-#ifdef DL_STANDALONE
static int dotlock_init_privs (void);
static void usage (const char *);
-#endif
static void dotlock_expand_link (char *, const char *, const char *);
static void BEGIN_PRIVILEGED (void);
static int dotlock_lock (const char *);
-#ifdef DL_STANDALONE
-
#define check_flags(a) if (a & DL_FL_ACTIONS) usage (argv[0])
-size_t safe_strlen (const char* s) {
- return (s ? strlen (s) : 0);
-}
-
int main (int argc, char **argv)
{
int i;
}
-#else /* DL_STANDALONE */
-
-/*
- * This function is intended to be invoked from within
- * mutt instead of mx.c's invoke_dotlock ().
- */
-
-int dotlock_invoke (const char *path, int fd, int flags, int retry)
-{
- int currdir;
- int r;
-
- DotlockFlags = flags;
-
- if ((currdir = open (".", O_RDONLY)) == -1)
- return DL_EX_ERROR;
-
- if (!(DotlockFlags & DL_FL_RETRY) || retry)
- Retry = MAXLOCKATTEMPT;
- else
- Retry = 0;
-
- r = dotlock_dispatch (path, fd);
-
- fchdir (currdir);
- close (currdir);
-
- return r;
-}
-
-#endif /* DL_STANDALONE */
-
-
static int dotlock_dispatch (const char *f, int fd)
{
char realpath[_POSIX_PATH_MAX];
#endif
}
-#ifdef DL_STANDALONE
-
/*
* Usage information.
*
static void usage (const char *av0)
{
- fprintf (stderr, "dotlock [Mutt-ng %s (%s)]\n", VERSION, ReleaseDate);
+ fprintf (stderr, "dotlock [Mutt-ng %s]\n", VERSION);
fprintf (stderr, "usage: %s [-t|-f|-u|-d] [-p] [-r <retries>] file\n", av0);
fputs ("\noptions:"
exit (DL_EX_ERROR);
}
-#endif
-
/*
* Access checking: Let's avoid to lock other users' mail
* spool files if we aren't permitted to read them.
dirname = ".";
}
- if (safe_strlen (basename) + 1 > l)
+ if (m_strlen(basename) + 1 > l)
return -1;
- strfcpy (bn, basename, l);
+ m_strcpy(bn, l, basename);
if (chdir (dirname) == -1)
return -1;
/* link is full path */
if (*link == '/') {
- strfcpy (newpath, link, _POSIX_PATH_MAX);
+ m_strcpy(newpath, _POSIX_PATH_MAX, link);
return;
}
if ((lb = strrchr (path, '/')) == NULL) {
/* no path in link */
- strfcpy (newpath, link, _POSIX_PATH_MAX);
+ m_strcpy(newpath, _POSIX_PATH_MAX, link);
return;
}
len = lb - path + 1;
memcpy (newpath, path, len);
- strfcpy (newpath + len, link, _POSIX_PATH_MAX - len);
+ m_strcpy(newpath + len, _POSIX_PATH_MAX - len, link);
}
linkfile[len] = '\0';
dotlock_expand_link (linkpath, pathptr, linkfile);
- strfcpy (realpath, linkpath, sizeof (realpath));
+ m_strcpy(realpath, sizeof(realpath), linkpath);
pathptr = realpath;
}
else
break;
}
- strfcpy (d, pathptr, l);
+ m_strcpy(d, l, pathptr);
return 0;
}