X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=etc%2Fafpd%2Fafp_dsi.c;h=3c42a6796d6967b287ac8788e40c7f420870614e;hb=d525573d235fbbba664d69e90450c7b82eb05835;hp=2fdeb9db32afc35fb68e73405bd4a1aa5542100c;hpb=14874ef66d68c5200a9a42a7408d022d58211898;p=netatalk.git diff --git a/etc/afpd/afp_dsi.c b/etc/afpd/afp_dsi.c index 2fdeb9db..3c42a679 100644 --- a/etc/afpd/afp_dsi.c +++ b/etc/afpd/afp_dsi.c @@ -32,12 +32,12 @@ #include #include #include -#include #include #include #include #include #include +#include #include "switch.h" #include "auth.h" @@ -70,7 +70,7 @@ static rc_elem_t replaycache[REPLAYCACHE_SIZE]; static sigjmp_buf recon_jmp; static void afp_dsi_close(AFPObj *obj) { - DSI *dsi = obj->handle; + DSI *dsi = obj->dsi; close(obj->ipc_fd); obj->ipc_fd = -1; @@ -104,7 +104,7 @@ static void afp_dsi_close(AFPObj *obj) */ static void afp_dsi_die(int sig) { - DSI *dsi = (DSI *)AFPobj->handle; + DSI *dsi = (DSI *)AFPobj->dsi; if (dsi->flags & DSI_RECONINPROG) { /* Primary reconnect succeeded, got SIGTERM from afpd parent */ @@ -117,7 +117,7 @@ static void afp_dsi_die(int sig) exit(0); } - dsi_attention(AFPobj->handle, AFPATTN_SHUTDOWN); + dsi_attention(AFPobj->dsi, AFPATTN_SHUTDOWN); afp_dsi_close(AFPobj); if (sig) /* if no signal, assume dieing because logins are disabled & don't log it (maintenance mode)*/ @@ -133,7 +133,7 @@ static void afp_dsi_die(int sig) /* SIGQUIT handler */ static void ipc_reconnect_handler(int sig _U_) { - DSI *dsi = (DSI *)AFPobj->handle; + DSI *dsi = (DSI *)AFPobj->dsi; if (reconnect_ipc(AFPobj) != 0) { LOG(log_error, logtype_afpd, "ipc_reconnect_handler: failed IPC reconnect"); @@ -154,7 +154,7 @@ static void afp_dsi_transfer_session(int sig _U_) { uint16_t dsiID; int socket; - DSI *dsi = (DSI *)AFPobj->handle; + DSI *dsi = (DSI *)AFPobj->dsi; LOG(log_debug, logtype_afpd, "afp_dsi_transfer_session: got SIGURG, trying to receive session"); @@ -205,13 +205,13 @@ static void afp_dsi_timedown(int sig _U_) { struct sigaction sv; struct itimerval it; - DSI *dsi = (DSI *)AFPobj->handle; + DSI *dsi = (DSI *)AFPobj->dsi; dsi->flags |= DSI_DIE; /* shutdown and don't reconnect. server going down in 5 minutes. */ setmessage("The server is going down for maintenance."); - if (dsi_attention(AFPobj->handle, AFPATTN_SHUTDOWN | AFPATTN_NORECONNECT | + if (dsi_attention(AFPobj->dsi, AFPATTN_SHUTDOWN | AFPATTN_NORECONNECT | AFPATTN_MESG | AFPATTN_TIME(5)) < 0) { - DSI *dsi = (DSI *)AFPobj->handle; + DSI *dsi = (DSI *)AFPobj->dsi; dsi->down_request = 1; } @@ -268,17 +268,17 @@ static void afp_dsi_debug(int sig _U_) /* ---------------------- */ static void afp_dsi_getmesg (int sig _U_) { - DSI *dsi = (DSI *)AFPobj->handle; + DSI *dsi = (DSI *)AFPobj->dsi; dsi->msg_request = 1; - if (dsi_attention(AFPobj->handle, AFPATTN_MESG | AFPATTN_TIME(5)) < 0) + if (dsi_attention(AFPobj->dsi, AFPATTN_MESG | AFPATTN_TIME(5)) < 0) dsi->msg_request = 2; } static void alarm_handler(int sig _U_) { int err; - DSI *dsi = (DSI *)AFPobj->handle; + DSI *dsi = (DSI *)AFPobj->dsi; /* we have to restart the timer because some libraries may use alarm() */ setitimer(ITIMER_REAL, &dsi->timer, NULL); @@ -332,7 +332,7 @@ static void alarm_handler(int sig _U_) if ((err = pollvoltime(AFPobj)) == 0) LOG(log_debug, logtype_afpd, "afp_alarm: sending DSI tickle"); - err = dsi_tickle(AFPobj->handle); + err = dsi_tickle(AFPobj->dsi); if (err <= 0) { if (geteuid() == 0) { LOG(log_note, logtype_afpd, "afp_alarm: unauthenticated user, connection problem"); @@ -356,14 +356,14 @@ static void pending_request(DSI *dsi) if (dsi->msg_request) { if (dsi->msg_request == 2) { /* didn't send it in signal handler */ - dsi_attention(AFPobj->handle, AFPATTN_MESG | AFPATTN_TIME(5)); + dsi_attention(AFPobj->dsi, AFPATTN_MESG | AFPATTN_TIME(5)); } dsi->msg_request = 0; readmessage(AFPobj); } if (dsi->down_request) { dsi->down_request = 0; - dsi_attention(AFPobj->handle, AFPATTN_SHUTDOWN | AFPATTN_NORECONNECT | + dsi_attention(AFPobj->dsi, AFPATTN_SHUTDOWN | AFPATTN_NORECONNECT | AFPATTN_MESG | AFPATTN_TIME(5)); } } @@ -373,7 +373,7 @@ static void pending_request(DSI *dsi) */ void afp_over_dsi(AFPObj *obj) { - DSI *dsi = (DSI *) obj->handle; + DSI *dsi = (DSI *) obj->dsi; int rc_idx; uint32_t err, cmd; uint8_t function; @@ -479,7 +479,7 @@ void afp_over_dsi(AFPObj *obj) continue; /* Blocking read on the network socket */ - cmd = dsi_receive(dsi); + cmd = dsi_stream_receive(dsi); if (cmd == 0) { /* cmd == 0 is the error condition */ @@ -529,7 +529,7 @@ void afp_over_dsi(AFPObj *obj) if (reload_request) { reload_request = 0; - load_volumes(AFPobj); + load_volumes(AFPobj, closevol); } /* The first SIGINT enables debugging, the next restores the config */ @@ -542,15 +542,15 @@ void afp_over_dsi(AFPObj *obj) if (debugging) { if (obj->options.logconfig) - setuplog(obj->options.logconfig); + setuplog(obj->options.logconfig, obj->options.logfile); else - setuplog("default log_note"); + setuplog("default:note", NULL); debugging = 0; } else { char logstr[50]; debugging = 1; - sprintf(logstr, "default log_maxdebug /tmp/afpd.%u.XXXXXX", getpid()); - setuplog(logstr); + sprintf(logstr, "/tmp/afpd.%u.XXXXXX", getpid()); + setuplog("default:maxdebug", logstr); } } @@ -588,7 +588,7 @@ void afp_over_dsi(AFPObj *obj) /* AFP replay cache */ rc_idx = dsi->clientID % REPLAYCACHE_SIZE; - LOG(log_debug, logtype_afpd, "DSI request ID: %u", dsi->clientID); + LOG(log_debug, logtype_dsi, "DSI request ID: %u", dsi->clientID); if (replaycache[rc_idx].DSIreqID == dsi->clientID && replaycache[rc_idx].AFPcommand == function) { @@ -631,9 +631,7 @@ void afp_over_dsi(AFPObj *obj) if (dsi->flags & DSI_NOREPLY) { dsi->flags &= ~DSI_NOREPLY; break; - } - - if (!dsi_cmdreply(dsi, err)) { + } else if (!dsi_cmdreply(dsi, err)) { LOG(log_error, logtype_afpd, "dsi_cmdreply(%d): %s", dsi->socket, strerror(errno) ); if (dsi_disconnect(dsi) != 0) afp_dsi_die(EXITERR_CLNT);