X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=name.c;h=15e324c5f2fca44c623347789100bc752af82761;hb=91cdde8a7a08c6797995cc67f4b55ac43780cdd8;hp=4b4b0b87d179720a4efd9f36b0f9206779833b06;hpb=6091827530d6dd43479d6709fb6e9f745c11e900;p=elogind.git diff --git a/name.c b/name.c index 4b4b0b87d..15e324c5f 100644 --- a/name.c +++ b/name.c @@ -2,6 +2,7 @@ #include #include +#include #include "set.h" #include "name.h" @@ -30,6 +31,32 @@ NameType name_type_from_string(const char *n) { return _NAME_TYPE_INVALID; } +#define VALID_CHARS \ + "0123456789" \ + "abcdefghijklmnopqrstuvwxyz" \ + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" \ + "-_" + +bool name_is_valid(const char *n) { + NameType t; + const char *e, *i; + + assert(n); + + t = name_type_from_string(n); + if (t < 0 || t >= _NAME_TYPE_MAX) + return false; + + if (!(e = strrchr(n, '.'))) + return false; + + for (i = n; i < e; i++) + if (!strchr(VALID_CHARS, *i)) + return false; + + return true; +} + Name *name_new(Manager *m) { Name *n;