aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--FICS/addgroup.cpp21
-rw-r--r--FICS/addgroup.h1
2 files changed, 22 insertions, 0 deletions
diff --git a/FICS/addgroup.cpp b/FICS/addgroup.cpp
index 59547d0..52c6639 100644
--- a/FICS/addgroup.cpp
+++ b/FICS/addgroup.cpp
@@ -140,6 +140,27 @@ group_exists(const char *name)
return false;
}
+bool
+is_valid_group_name(const char *name)
+{
+ const char legal_index[] =
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "abcdefghijklmnopqrstuvwxyz"
+ "0123456789_-";
+ const size_t name_min = 2;
+ const size_t name_max = 30;
+
+ if (name == nullptr || strcmp(name, "") == 0)
+ return false;
+ else if (strlen(name) < name_min || strlen(name) > name_max)
+ return false;
+ for (const char *cp = name; *cp != '\0'; cp++) {
+ if (strchr(legal_index, *cp) == nullptr)
+ return false;
+ }
+ return true;
+}
+
int
read_the_group_permissions_file(const char *path)
{
diff --git a/FICS/addgroup.h b/FICS/addgroup.h
index e5b1906..3642969 100644
--- a/FICS/addgroup.h
+++ b/FICS/addgroup.h
@@ -11,6 +11,7 @@ int fics_addgroup(const char *);
bool get_group_id(const char *, int *);
bool get_next_line_from_file(FILE *, char **); // uses 'new[]'
bool group_exists(const char *);
+bool is_valid_group_name(const char *);
int read_the_group_permissions_file(const char *);
__FICS_END_DECLS