extern unsigned int module_dirlen;
extern mode_t orig_umask;
extern char *partial_dir;
-extern struct filter_list_struct daemon_filter_list;
+extern filter_rule_list daemon_filter_list;
int sanitize_paths = 0;
exit_cleanup(RERR_MALLOC);
}
-int set_modtime(const char *fname, time_t modtime, mode_t mode)
+int set_modtime(const char *fname, time_t modtime, uint32 mod_nsec, mode_t mode)
{
-#if !defined HAVE_LUTIMES || !defined HAVE_UTIMES
+#ifndef CAN_SET_SYMLINK_TIMES
if (S_ISLNK(mode))
return 1;
#endif
return 0;
{
-#ifdef HAVE_UTIMES
+#ifdef HAVE_UTIMENSAT
+ struct timespec t[2];
+ t[0].tv_sec = 0;
+ t[0].tv_nsec = UTIME_NOW;
+ t[1].tv_sec = modtime;
+ t[1].tv_nsec = mod_nsec;
+ if (utimensat(AT_FDCWD, fname, t, AT_SYMLINK_NOFOLLOW) < 0)
+ return S_ISLNK(mode) && errno == ENOSYS ? 1 : -1;
+ return 0;
+#elif defined HAVE_UTIMES || defined HAVE_LUTIMES
struct timeval t[2];
t[0].tv_sec = time(NULL);
t[0].tv_usec = 0;
t[1].tv_sec = modtime;
- t[1].tv_usec = 0;
+ t[1].tv_usec = mod_nsec / 1000;
# ifdef HAVE_LUTIMES
- if (S_ISLNK(mode)) {
- if (lutimes(fname, t) < 0)
- return errno == ENOSYS ? 1 : -1;
- return 0;
- }
-# endif
+ if (lutimes(fname, t) < 0)
+ return S_ISLNK(mode) && errno == ENOSYS ? 1 : -1;
+ return 0;
+# else
return utimes(fname, t);
+# endif
#elif defined HAVE_STRUCT_UTIMBUF
struct utimbuf tbuf;
tbuf.actime = time(NULL);
}
}
-/* Parse a user name or (optionally) a number into a uid */
-int user_to_uid(const char *name, uid_t *uid_p, BOOL num_ok)
-{
- struct passwd *pass;
- if (!name || !*name)
- return 0;
- if (num_ok && name[strspn(name, "0123456789")] == '\0') {
- *uid_p = atol(name);
- return 1;
- }
- if (!(pass = getpwnam(name)))
- return 0;
- *uid_p = pass->pw_uid;
- return 1;
-}
-
-/* Parse a group name or (optionally) a number into a gid */
-int group_to_gid(const char *name, gid_t *gid_p, BOOL num_ok)
-{
- struct group *grp;
- if (!name || !*name)
- return 0;
- if (num_ok && name[strspn(name, "0123456789")] == '\0') {
- *gid_p = atol(name);
- return 1;
- }
- if (!(grp = getgrnam(name)))
- return 0;
- *gid_p = grp->gr_gid;
- return 1;
-}
-
/** Lock a byte range in a open file */
int lock_range(int fd, int offset, int len)
{
#define UNIT (1 << 16)
-uint32 fuzzy_distance(const char *s1, int len1, const char *s2, int len2)
+uint32 fuzzy_distance(const char *s1, unsigned len1, const char *s2, unsigned len2)
{
uint32 a[MAXPATHLEN], diag, above, left, diag_inc, above_inc, left_inc;
int32 cost;
- int i1, i2;
+ unsigned i1, i2;
if (!len1 || !len2) {
if (!len1) {