/*
- * $Id: afp_dsi.c,v 1.53 2010/03/30 12:55:26 franklahm Exp $
- *
* Copyright (c) 1999 Adrian Sun (asun@zoology.washington.edu)
* Copyright (c) 1990,1993 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
* as uid 0, that's the wrong user for volume's prexec_close scripts if any,
* restore our login user
*/
- if (seteuid( obj->uid ) < 0) {
- LOG(log_error, logtype_afpd, "can't seteuid back %s", strerror(errno));
- exit(EXITERR_SYS);
+ if (geteuid() != obj->uid) {
+ if (seteuid( obj->uid ) < 0) {
+ LOG(log_error, logtype_afpd, "can't seteuid(%u) back %s: uid: %u, euid: %u",
+ obj->uid, strerror(errno), getuid(), geteuid());
+ exit(EXITERR_SYS);
+ }
}
+
close_all_vol();
if (obj->logout)
(*obj->logout)();
- LOG(log_info, logtype_afpd, "%.2fKB read, %.2fKB written",
+ LOG(log_info, logtype_afpd, "AFP statistics: %.2f KB read, %.2f KB written",
dsi->read_count/1024.0, dsi->write_count/1024.0);
+ log_dircache_stat();
dsi_close(dsi);
}
/* ---------------------------------
* SIGHUP reload configuration file
- * FIXME here or we wait ?
-*/
+ */
volatile int reload_request = 0;
static void afp_dsi_reload(int sig _U_)
reload_request = 0;
load_volumes(child.obj);
dircache_dump();
+ log_dircache_stat();
}
+ /* The first SIGINT enables debugging, the next restores the config */
if (debug_request) {
- char logstr[50];
+ static int debugging = 0;
debug_request = 0;
- /* The first SIGINT enables debugging, the second one kills us */
- action.sa_handler = afp_dsi_die;
- sigfillset( &action.sa_mask );
- action.sa_flags = SA_RESTART;
- if ( sigaction( SIGINT, &action, NULL ) < 0 ) {
- LOG(log_error, logtype_afpd, "afp_over_dsi: sigaction: %s", strerror(errno) );
- afp_dsi_die(EXITERR_SYS);
+ if (debugging) {
+ if (obj->options.logconfig)
+ setuplog(obj->options.logconfig);
+ else
+ setuplog("default log_note");
+ debugging = 0;
+ } else {
+ char logstr[50];
+ debugging = 1;
+ sprintf(logstr, "default log_maxdebug /tmp/afpd.%u.XXXXXX", getpid());
+ setuplog(logstr);
}
-
- sprintf(logstr, "default log_maxdebug /tmp/afpd.%u.XXXXXX", getpid());
- setuplog(logstr);
}
if (cmd == DSIFUNC_TICKLE) {