X-Git-Url: http://andersk.mit.edu/gitweb/openssh.git/blobdiff_plain/3b1a83dffbbf9a551e854922844daa2089e670c5..da89cf4dea90eaed324c80b9062f1eed13acd107:/misc.c diff --git a/misc.c b/misc.c index 4a1213a2..feeacb85 100644 --- a/misc.c +++ b/misc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: misc.c,v 1.2 2001/02/22 21:59:44 markus Exp $ */ +/* $OpenBSD: misc.c,v 1.5 2001/04/12 20:09:37 stevesk Exp $ */ /* * Copyright (c) 2000 Markus Friedl. All rights reserved. @@ -25,10 +25,11 @@ */ #include "includes.h" -RCSID("$OpenBSD: misc.c,v 1.2 2001/02/22 21:59:44 markus Exp $"); +RCSID("$OpenBSD: misc.c,v 1.5 2001/04/12 20:09:37 stevesk Exp $"); #include "misc.h" #include "log.h" +#include "xmalloc.h" char * chop(char *s) @@ -100,17 +101,36 @@ struct passwd * pwcopy(struct passwd *pw) { struct passwd *copy = xmalloc(sizeof(*copy)); + memset(copy, 0, sizeof(*copy)); copy->pw_name = xstrdup(pw->pw_name); copy->pw_passwd = xstrdup(pw->pw_passwd); + copy->pw_gecos = xstrdup(pw->pw_gecos); copy->pw_uid = pw->pw_uid; copy->pw_gid = pw->pw_gid; +#ifdef HAVE_PW_CLASS_IN_PASSWD copy->pw_class = xstrdup(pw->pw_class); +#endif copy->pw_dir = xstrdup(pw->pw_dir); copy->pw_shell = xstrdup(pw->pw_shell); return copy; } +int a2port(const char *s) +{ + long port; + char *endp; + + errno = 0; + port = strtol(s, &endp, 0); + if (s == endp || *endp != '\0' || + (errno == ERANGE && (port == LONG_MIN || port == LONG_MAX)) || + port <= 0 || port > 65535) + return 0; + + return port; +} + mysig_t mysignal(int sig, mysig_t act) {