diff options
-rw-r--r-- | accel-pppd/accel-ppp.conf | 3 | ||||
-rw-r--r-- | accel-pppd/include/events.h | 1 | ||||
-rw-r--r-- | accel-pppd/logs/log_file.c | 100 | ||||
-rw-r--r-- | accel-pppd/ppp/ppp_auth.c | 7 | ||||
-rw-r--r-- | accel-pppd/ppp/ppp_auth.h | 2 |
5 files changed, 62 insertions, 51 deletions
diff --git a/accel-pppd/accel-ppp.conf b/accel-pppd/accel-ppp.conf index ecef507..60401c8 100644 --- a/accel-pppd/accel-ppp.conf +++ b/accel-pppd/accel-ppp.conf @@ -70,7 +70,6 @@ gw-ip-address=192.168.100.1 auth-server=127.0.0.1:1812,testing123 acct-server=127.0.0.1:1813,testing123 dae-server=127.0.0.1:3799,testing123 -#dm_coa_secret=testing123 (deprecated) verbose=1 #timeout=3 #max-try=3 @@ -121,4 +120,4 @@ verbose=1 [cli] telnet=127.0.0.1:2000 tcp=127.0.0.1:2001 -#passwd=123 +#password=123 diff --git a/accel-pppd/include/events.h b/accel-pppd/include/events.h index 6a8caf0..a59ee31 100644 --- a/accel-pppd/include/events.h +++ b/accel-pppd/include/events.h @@ -14,6 +14,7 @@ #define EV_PPP_PRE_UP 9 #define EV_PPP_ACCT_START 10 #define EV_CONFIG_RELOAD 11 +#define EV_PPP_AUTH_FAILED 12 #define EV_IP_CHANGED 100 #define EV_SHAPER 101 #define EV_MPPE_KEYS 102 diff --git a/accel-pppd/logs/log_file.c b/accel-pppd/logs/log_file.c index e435757..dfb1c20 100644 --- a/accel-pppd/logs/log_file.c +++ b/accel-pppd/logs/log_file.c @@ -45,6 +45,7 @@ struct log_file_pd_t struct ppp_pd_t pd; struct log_file_t lf; unsigned long tmp; + int authorized; }; static int conf_color; @@ -362,6 +363,57 @@ static void free_lpd(struct log_file_pd_t *lpd) } } +static void ev_ppp_authorized(struct ppp_t *ppp) +{ + struct log_file_pd_t *lpd; + char *fname; + + lpd = find_pd(ppp, &pd_key1); + if (!lpd) + return; + + if (lpd->authorized) + return; + + lpd->authorized = 1; + + fname = _malloc(PATH_MAX); + if (!fname) { + log_emerg("log_file: out of memory\n"); + return; + } + + strcpy(fname, conf_per_user_dir); + strcat(fname, "/"); + strcat(fname, ppp->username); + if (conf_per_session) { + if (mkdir(fname, S_IRWXU) && errno != EEXIST) { + log_emerg("log_file: mkdir '%s': %s'\n", fname, strerror(errno)); + goto out_err; + } + strcat(fname, "/"); + strcat(fname, ppp->sessionid); + } + strcat(fname, ".log"); + + if (log_file_open(&lpd->lf, fname)) + goto out_err; + + _free(fname); + + if (!list_empty(&lpd->lf.msgs)) { + lpd->lf.queued = 1; + queue_lf(&lpd->lf); + } + + return; + +out_err: + _free(fname); + list_del(&lpd->pd.entry); + free_lpd(lpd); +} + static void ev_ctrl_started(struct ppp_t *ppp) { struct log_file_pd_t *lpd; @@ -424,7 +476,6 @@ static void ev_ctrl_finished(struct ppp_t *ppp) if (lpd) free_lpd(lpd); - lpd = find_pd(ppp, &pd_key2); if (lpd) { if (lpd->tmp) { @@ -483,52 +534,6 @@ static void ev_ppp_starting(struct ppp_t *ppp) _free(fname2); } -static void ev_ppp_authorized(struct ppp_t *ppp) -{ - struct log_file_pd_t *lpd; - char *fname; - - lpd = find_pd(ppp, &pd_key1); - if (!lpd) - return; - - fname = _malloc(PATH_MAX); - if (!fname) { - log_emerg("log_file: out of memory\n"); - return; - } - - strcpy(fname, conf_per_user_dir); - strcat(fname, "/"); - strcat(fname, ppp->username); - if (conf_per_session) { - if (mkdir(fname, S_IRWXU) && errno != EEXIST) { - log_emerg("log_file: mkdir '%s': %s'\n", fname, strerror(errno)); - goto out_err; - } - strcat(fname, "/"); - strcat(fname, ppp->sessionid); - } - strcat(fname, ".log"); - - if (log_file_open(&lpd->lf, fname)) - goto out_err; - - _free(fname); - - if (!list_empty(&lpd->lf.msgs)) { - lpd->lf.queued = 1; - queue_lf(&lpd->lf); - } - - return; - -out_err: - _free(fname); - list_del(&lpd->pd.entry); - free_lpd(lpd); -} - static struct log_target_t general_target = { .log = general_log, @@ -611,4 +616,5 @@ static void __init init(void) triton_event_register_handler(EV_CTRL_FINISHED, (triton_event_func)ev_ctrl_finished); triton_event_register_handler(EV_PPP_STARTING, (triton_event_func)ev_ppp_starting); triton_event_register_handler(EV_PPP_AUTHORIZED, (triton_event_func)ev_ppp_authorized); + triton_event_register_handler(EV_PPP_AUTH_FAILED, (triton_event_func)ev_ppp_authorized); } diff --git a/accel-pppd/ppp/ppp_auth.c b/accel-pppd/ppp/ppp_auth.c index 92d1f9c..c67b4e2 100644 --- a/accel-pppd/ppp/ppp_auth.c +++ b/accel-pppd/ppp/ppp_auth.c @@ -337,11 +337,16 @@ int __export ppp_auth_successed(struct ppp_t *ppp, char *username) return 0; } -void __export ppp_auth_failed(struct ppp_t *ppp, const char *username) +void __export ppp_auth_failed(struct ppp_t *ppp, char *username) { if (username) { + pthread_rwlock_wrlock(&ppp_lock); + if (!ppp->username) + ppp->username = _strdup(username); + pthread_rwlock_unlock(&ppp_lock); log_ppp_info1("%s: authentication failed\n", username); log_info1("%s: authentication failed\n", username); + triton_event_fire(EV_PPP_AUTH_FAILED, ppp); } else log_ppp_info1("authentication failed\n"); ppp_terminate(ppp, TERM_AUTH_ERROR, 0); diff --git a/accel-pppd/ppp/ppp_auth.h b/accel-pppd/ppp/ppp_auth.h index c84f5f9..6f86d26 100644 --- a/accel-pppd/ppp/ppp_auth.h +++ b/accel-pppd/ppp/ppp_auth.h @@ -30,7 +30,7 @@ struct ppp_auth_handler_t int ppp_auth_register_handler(struct ppp_auth_handler_t*); int ppp_auth_successed(struct ppp_t *ppp, char *username); -void ppp_auth_failed(struct ppp_t *ppp, const char *username); +void ppp_auth_failed(struct ppp_t *ppp, char *username); int ppp_auth_restart(struct ppp_t *ppp); #endif |