+int is_valid_mark(char *mark)
+{
+ char *ptr;
+
+ if(!mark || !*mark)
+ return 0;
+ if(strlen(mark) > MARKLEN)
+ return 0;
+
+ for(ptr = mark; *ptr; ptr++) {
+ if(! (isalnum(*ptr) || *ptr == '-'))
+ return 0;
+ }
+
+ return 1;
+}
+
+static MODCMD_FUNC(cmd_mark)
+{
+ char *mark = argv[2];
+ struct userNode *victim = GetUserH(argv[1]);
+
+ if(!victim)
+ reply("MSG_NICK_UNKNOWN", argv[1]);
+ else if(!is_valid_mark(mark))
+ reply("OSMSG_MARK_INVALID");
+ else {
+ irc_mark(victim, mark);
+ reply("OSMSG_MARK_SET");
+ return 1;
+ }
+ return 0;
+}
+