X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=etc%2Fafpd%2Fafp_dsi.c;h=0a735ea4d2ae1a0946b63d0ece3cdea8756547f8;hb=4054f4b3c85ecab060dafd46c0d3632cadbb5803;hp=11e901f159bb6a9995e77e1da5a8e792c1635e53;hpb=9c9da9be9d3524dc00b9fbd1737dddd1356685c9;p=netatalk.git diff --git a/etc/afpd/afp_dsi.c b/etc/afpd/afp_dsi.c index 11e901f1..0a735ea4 100644 --- a/etc/afpd/afp_dsi.c +++ b/etc/afpd/afp_dsi.c @@ -118,7 +118,7 @@ static void afp_dsi_die(int sig) dsi_attention(AFPobj->handle, AFPATTN_SHUTDOWN); afp_dsi_close(AFPobj); - if (sig) /* if no signal, assume dieing because logins are disabled & + if (sig) /* if no signal, assume dieing because logins are disabled & don't log it (maintenance mode)*/ LOG(log_info, logtype_afpd, "Connection terminated"); if (sig == SIGTERM || sig == SIGALRM) { @@ -284,7 +284,7 @@ static void alarm_handler(int sig _U_) if (dsi->flags & DSI_SLEEPING) { if (dsi->tickle > AFPobj->options.sleep) { - LOG(log_error, logtype_afpd, "afp_alarm: sleep time ended"); + LOG(log_note, logtype_afpd, "afp_alarm: sleep time ended"); afp_dsi_die(EXITERR_CLNT); } return; @@ -292,7 +292,7 @@ static void alarm_handler(int sig _U_) if (dsi->flags & DSI_DISCONNECTED) { if (dsi->tickle > AFPobj->options.disconnected) { - LOG(log_error, logtype_afpd, "afp_alarm: no reconnect within 10 minutes, goodbye"); + LOG(log_error, logtype_afpd, "afp_alarm: reconnect timer expired, goodbye"); afp_dsi_die(EXITERR_CLNT); } return; @@ -495,6 +495,13 @@ void afp_over_dsi(AFPObj *obj) } /* Some error on the client connection, enter disconnected state */ dsi->flags |= DSI_DISCONNECTED; + + /* the client sometimes logs out (afp_logout) but doesn't close the DSI session */ + if (dsi->flags & DSI_AFP_LOGGED_OUT) { + afp_dsi_close(obj); + exit(0); + } + pause(); /* gets interrupted by SIGALARM or SIGURG tickle */ continue; /* continue receiving until disconnect timer expires * or a primary reconnect succeeds */ @@ -542,7 +549,7 @@ void afp_over_dsi(AFPObj *obj) LOG(log_debug, logtype_afpd, "DSI: close session request"); afp_dsi_close(obj); LOG(log_note, logtype_afpd, "done"); - return; + exit(0); case DSIFUNC_TICKLE: dsi->flags &= ~DSI_DATA; /* thats no data in the sense we use it in alarm_handler */