123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- /*
- * $Id: pptpd-logwtmp.c,v 1.6 2013/02/07 00:37:39 quozl Exp $
- * pptpd-logwtmp.c - pppd plugin to update wtmp for a pptpd user
- *
- * Copyright 2004 James Cameron.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version
- * 2 of the License, or (at your option) any later version.
- */
- #include <unistd.h>
- #include <utmp.h>
- #include <string.h>
- #include <pppd/pppd.h>
- char pppd_version[] = VERSION;
- static char pptpd_original_ip[PATH_MAX+1];
- static bool pptpd_logwtmp_strip_domain = 0;
- static option_t options[] = {
- { "pptpd-original-ip", o_string, pptpd_original_ip,
- "Original IP address of the PPTP connection",
- OPT_STATIC, NULL, PATH_MAX },
- { "pptpd-logwtmp-strip-domain", o_bool, &pptpd_logwtmp_strip_domain,
- "Strip domain from username before logging", OPT_PRIO | 1 },
- { NULL }
- };
- static char *reduce(char *user)
- {
- char *sep;
- if (!pptpd_logwtmp_strip_domain) return user;
- sep = strstr(user, "//"); /* two slash */
- if (sep != NULL) user = sep + 2;
- sep = strstr(user, "\\"); /* or one backslash */
- if (sep != NULL) user = sep + 1;
- return user;
- }
- static void ip_up(void *opaque, int arg)
- {
- char *user = reduce(peer_authname);
- if (debug)
- notice("pptpd-logwtmp.so ip-up %s %s %s", ifname, user,
- pptpd_original_ip);
- logwtmp(ifname, user, pptpd_original_ip);
- }
- static void ip_down(void *opaque, int arg)
- {
- if (debug)
- notice("pptpd-logwtmp.so ip-down %s", ifname);
- logwtmp(ifname, "", "");
- }
- void plugin_init(void)
- {
- add_options(options);
- add_notifier(&ip_up_notifier, ip_up, NULL);
- add_notifier(&ip_down_notifier, ip_down, NULL);
- if (debug)
- notice("pptpd-logwtmp: $Version$");
- }
|