/* -*-c-*-
*
- * $Id$
- *
* Main program
*
* (c) 2001 Straylight/Edgeware
*/
-/*----- Licensing notice --------------------------------------------------*
+/*----- Licensing notice --------------------------------------------------*
*
* This file is part of Trivial IP Encryption (TrIPE).
*
* 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.
- *
+ *
* TrIPE is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License
* along with TrIPE; if not, write to the Free Software Foundation,
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
sel_addtimer(&sel, &it, &tvv, interval, v);
}
-/* --- @mystrieq@ --- *
- *
- * Arguments: @const char *x, *y@ = two strings
- *
- * Returns: True if @x@ and @y are equal, up to case.
- */
-
-int mystrieq(const char *x, const char *y)
-{
- for (;;) {
- if (!*x && !*y) return (1);
- if (tolower((unsigned char)*x) != tolower((unsigned char)*y))
- return (0);
- x++; y++;
- }
-}
-
/* --- @main@ --- *
*
* Arguments: @int argc@ = number of command line arguments
-D, --daemon Run in the background.\n\
-d, --directory=DIR Switch to directory DIR [default " CONFIGDIR "].\n\
-b, --bind-address=ADDR Bind UDP socket to this IP ADDR.\n\
--p, --port=PORT Select UDP port to listen to.\n\
+-p, --port=PORT Select UDP port to listen to "
+ "[default " STR(TRIPE_PORT) "].\n\
-n, --tunnel=TUNNEL Seelect default tunnel driver.\n\
-U, --setuid=USER Set uid to USER after initialization.\n\
-G, --setgid=GROUP Set gid to GROUP after initialization.\n\
const char *csock = SOCKETDIR "/tripesock";
const char *dir = CONFIGDIR;
const char *p;
- unsigned port = 0;
+ unsigned port = TRIPE_PORT;
struct in_addr baddr = { INADDR_ANY };
unsigned f = 0;
int i;
case 'D':
f |= f_daemon;
break;
- case 'U': {
- struct passwd *pw;
- char *p;
- unsigned long i = strtoul(optarg, &p, 0);
- if (!*p)
- pw = getpwuid(i);
- else
- pw = getpwnam(optarg);
- if (!pw)
- die(EXIT_FAILURE, "user `%s' not found", optarg);
- u = pw->pw_uid;
- if (g == -1)
- g = pw->pw_gid;
- } break;
- case 'G': {
- struct group *gr;
- char *p;
- unsigned long i = strtoul(optarg, &p, 0);
- if (!*p)
- gr = getgrgid(i);
- else
- gr = getgrnam(optarg);
- if (!gr)
- die(EXIT_FAILURE, "group `%s' not found", optarg);
- g = gr->gr_gid;
- } break;
+ case 'U':
+ u = u_getuser(optarg, &g);
+ break;
+ case 'G':
+ g = u_getgroup(optarg);
+ break;
case 'b': {
struct hostent *h = gethostbyname(optarg);
die(EXIT_FAILURE, "unknown service name `%s'", optarg);
i = ntohs(s->s_port);
}
- if (i == 0 || i >= 65536)
+ if (i >= 65536)
die(EXIT_FAILURE, "bad port number %lu", i);
port = i;
} break;
a_create(STDIN_FILENO, STDOUT_FILENO, AF_WARN);
#endif
}
- if (g != (gid_t)-1) {
- if (setgid(g) || (getuid() == 0 && setgroups(1, &g))) {
- die(EXIT_FAILURE, "couldn't setgid to %u: %s",
- (unsigned)g, strerror(errno));
- }
- }
- if (u != (uid_t)-1) {
- if (setuid(u)) {
- die(EXIT_FAILURE, "couldn't setuid to %u: %s",
- (unsigned)u, strerror(errno));
- }
- }
+ u_setugid(u, g);
km_init(kr_priv, kr_pub, tag_priv);
a_init(csock);
if (f & f_daemon) {