fixed cmd_oset parameter handling (* might also be a valid input for the fakehost...
[srvx.git] / src / mod-hostserv.c
index 461b6cd801dc8ca863a35fe727fab0c00fbc8870..ce8a3745d64ad405d5ef7e8ffe4ddd696a315d4c 100644 (file)
@@ -1168,7 +1168,7 @@ static MODCMD_FUNC(cmd_oset) {
     struct handle_info *hi;
     char *fakehost;
     struct hs_assignment *assignment;
-    if(!strchr(argv[1], '.')) {
+    if(!strchr(argv[1], '.') && strcmp(argv[1], "*")) {
         if (!(hi = modcmd_get_handle_info(user, argv[1])))
             return 0;
         fakehost = argv[2];
@@ -1190,7 +1190,7 @@ static MODCMD_FUNC(cmd_oset) {
         reply("HSMSG_ACCESS_DENIED");
         return 0;
     }
-    if(!strcmp(argv[1], "*")) {
+    if(!strcmp(fakehost, "*")) {
         if(!assignment)
             return 0; //simply ignore (there is no assignment in use)
         hs_activate_assignment(hs_user, NULL);
@@ -1244,29 +1244,29 @@ static void hostserv_conf_read(void) {
     hostserv_conf.modes = (str ? str : NULL);
     
     str = database_get_data(conf_node, "toplevel_access", RECDB_QSTRING);
-    unsigned int toplevel_access = atoi(str);
+    unsigned int toplevel_access = (str ? atoi(str) : 0);
     hostserv_conf.toplevel_access = (toplevel_access ? toplevel_access : 600);
     
     str = database_get_data(conf_node, "fallback_other_assignment", RECDB_QSTRING);
-    hostserv_conf.fallback_other_assignment = (atoi(str) ? 1 : 0);
+    hostserv_conf.fallback_other_assignment = (str && atoi(str) ? 1 : 0);
     
     str = database_get_data(conf_node, "manager_can_del_toplevel", RECDB_QSTRING);
-    hostserv_conf.manager_can_del_toplevel = (atoi(str) ? 1 : 0);
+    hostserv_conf.manager_can_del_toplevel = (str && atoi(str) ? 1 : 0);
     
     str = database_get_data(conf_node, "manager_can_del_secondlevel", RECDB_QSTRING);
-    hostserv_conf.manager_can_del_secondlevel = (atoi(str) ? 1 : 0);
+    hostserv_conf.manager_can_del_secondlevel = (str && atoi(str) ? 1 : 0);
     
     str = database_get_data(conf_node, "manager_can_rename_toplevel", RECDB_QSTRING);
-    hostserv_conf.manager_can_rename_toplevel = (atoi(str) ? 1 : 0);
+    hostserv_conf.manager_can_rename_toplevel = (str && atoi(str) ? 1 : 0);
     
     str = database_get_data(conf_node, "manager_can_rename_secondlevel", RECDB_QSTRING);
-    hostserv_conf.manager_can_rename_secondlevel = (atoi(str) ? 1 : 0);
+    hostserv_conf.manager_can_rename_secondlevel = (str && atoi(str) ? 1 : 0);
     
     str = database_get_data(conf_node, "manager_toplevel_can_oset", RECDB_QSTRING);
-    hostserv_conf.manager_toplevel_can_oset = (atoi(str) ? 1 : 0);
+    hostserv_conf.manager_toplevel_can_oset = (str && atoi(str) ? 1 : 0);
     
     str = database_get_data(conf_node, "manager_secondlevel_can_oset", RECDB_QSTRING);
-    hostserv_conf.manager_secondlevel_can_oset = (atoi(str) ? 1 : 0);
+    hostserv_conf.manager_secondlevel_can_oset = (str && atoi(str) ? 1 : 0);
 }
 
 static int hostserv_saxdb_read_secondlevel(const char *name, void *data, UNUSED_ARG(void *extra));