3 * Shared routines for playing with list membership.
5 * Copyright (C) 1999 by the Massachusetts Institute of Technology
6 * For copying and distribution information, please see the file
10 #include <mit-copyright.h>
13 #include "mrclient-internal.h"
24 static char default_realm[REALM_SZ];
26 int mrcl_validate_string_member(char *str)
28 char *p, *lname, *ret;
30 for (ret = str; *ret; ret++)
34 mrcl_set_message("STRING \"%s\" contains control characters, "
35 "which are not allowed.", str);
43 char *host = canonicalize_hostname(strdup(++p));
45 if (mailtype(host) != MAILTYPE_SMTP)
49 *strchr(str, '@') = '\0';
50 mrcl_set_message("STRING \"%s\" should be USER or LIST \"%s\" "
51 "because it is a local name.", lname, str);
57 else if (!strpbrk(str, "%!"))
59 mrcl_set_message("STRING \"%s\" is not a foreign mail address.\nAdding "
60 "it to a mailing list may cause the list to break.",
69 int mrcl_validate_kerberos_member(char *str, char **ret)
75 for (p = str; *p; p++)
77 if (isspace(*p) || *p == ',')
79 mrcl_set_message("KERBEROS member \"%s\" may not contain whitespace "
88 /* An IP address is not a Kerberos principal, but we allow it
91 if (strtoul(str, &p, 10) < 256 && (*p == '.') &&
92 strtoul(p + 1, &p, 10) < 256 && (*p == '.') &&
93 strtoul(p + 1, &p, 10) < 256 && (*p == '.') &&
94 strtoul(p + 1, &p, 10) < 256 && !*p)
101 krb_get_lrealm(default_realm, 1);
103 *ret = malloc(strlen(str) + strlen(default_realm) + 2);
104 sprintf(*ret, "%s@%s", str, default_realm);
106 mrcl_set_message("Warning: default realm \"%s\" added to principal "
107 "\"%s\"", default_realm, str);
111 /* Check capitalization. */
113 p = strchr(*ret, '@');
119 mrcl_set_message("Warning: set realm in \"%s\" to all caps.", *ret);