- if(!strchr(argv[1], '.')) {
- if (!(hi = modcmd_get_handle_info(user, argv[1])))
- return 0;
- fakehost = argv[2];
- } else {
- if (!(hi = modcmd_get_handle_info(user, argv[2])))
- return 0;
- fakehost = argv[1];
- }
- char *slfh_name = fakehost;
- char *tlfh_name = strchr(fakehost, '.');
- *tlfh_name = '\0';
- tlfh_name++;
- if(strchr(tlfh_name, '.')) {
- reply("HSMSG_UNKNOWN_FAKEHOST", slfh_name, tlfh_name);
- return 0;
- }
- struct hs_toplevel *tlfh;
- struct hs_secondlevel *slfh = NULL;
- for(tlfh = toplevels; tlfh; tlfh = tlfh->next) {
- if(!irccasecmp(tlfh->fakehost, tlfh_name)) break;
- }
- if(!tlfh) {
- reply("HSMSG_UNKNOWN_FAKEHOST", slfh_name, tlfh_name);
- return 0;
- }
- if(!irccasecmp(slfh_name, "*")) {
- if(!check_management_access(user->handle_info, tlfh, NULL)) {
- reply("HSMSG_UNKNOWN_FAKEHOST", slfh_name, tlfh_name);
- return 0;
- }
- } else {
- for(slfh = tlfh->secondlevel; slfh; slfh = slfh->next) {
- if(!irccasecmp(slfh->fakehost, slfh_name)) break;
- }
- if(!slfh || !check_management_access(user->handle_info, tlfh, slfh)) {
- reply("HSMSG_UNKNOWN_FAKEHOST", slfh_name, tlfh_name);
- return 0;
- }
- }
- struct hs_user *huser = hs_get_user(hi, 1);
- struct hs_manager *manager;
- if(slfh) {
- for(manager = huser->managements; manager; manager = manager->next) {
- if(manager->type == 2 && manager->object == slfh) {
- reply("HSMSG_MANAGER_ALREADY", hi->handle, slfh_name, tlfh_name);
- return 0;
- }
- }
- }
- for(manager = huser->managements; manager; manager = manager->next) {
- if(manager->type == 1 && manager->object == tlfh) {
- reply("HSMSG_MANAGER_ALREADY", hi->handle, "*", tlfh_name);
- return 0;
- }
- }
- if(slfh)
- hs_add_manager_secondlevel(slfh, huser);
- else
- hs_add_manager_toplevel(tlfh, huser);
- reply("HSMSG_MANAGER_ADDED", hi->handle, slfh_name, tlfh_name);
+ if(!strchr(argv[1], '.')) {
+ if (!(hi = modcmd_get_handle_info(user, argv[1])))
+ return 0;
+ fakehost = argv[2];
+ } else {
+ if (!(hi = modcmd_get_handle_info(user, argv[2])))
+ return 0;
+ fakehost = argv[1];
+ }
+ char *slfh_name = fakehost;
+ char *tlfh_name = strchr(fakehost, '.');
+ *tlfh_name = '\0';
+ tlfh_name++;
+ if(strchr(tlfh_name, '.')) {
+ reply("HSMSG_UNKNOWN_FAKEHOST", slfh_name, tlfh_name);
+ return 0;
+ }
+ struct hs_toplevel *tlfh;
+ struct hs_secondlevel *slfh = NULL;
+ for(tlfh = toplevels; tlfh; tlfh = tlfh->next) {
+ if(!irccasecmp(tlfh->fakehost, tlfh_name)) break;
+ }
+ if(!tlfh) {
+ reply("HSMSG_UNKNOWN_FAKEHOST", slfh_name, tlfh_name);
+ return 0;
+ }
+ if(!irccasecmp(slfh_name, "*")) {
+ if(!check_management_access(user->handle_info, tlfh, NULL)) {
+ reply("HSMSG_UNKNOWN_FAKEHOST", slfh_name, tlfh_name);
+ return 0;
+ }
+ } else {
+ for(slfh = tlfh->secondlevel; slfh; slfh = slfh->next) {
+ if(!irccasecmp(slfh->fakehost, slfh_name)) break;
+ }
+ if(!slfh || !check_management_access(user->handle_info, tlfh, slfh)) {
+ reply("HSMSG_UNKNOWN_FAKEHOST", slfh_name, tlfh_name);
+ return 0;
+ }
+ }
+ struct hs_user *huser = hs_get_user(hi, 1);
+ struct hs_manager *manager;
+ if(slfh) {
+ for(manager = huser->managements; manager; manager = manager->next) {
+ if(manager->type == 2 && manager->object == slfh) {
+ reply("HSMSG_MANAGER_ALREADY", hi->handle, slfh_name, tlfh_name);
+ return 0;
+ }
+ }
+ }
+ for(manager = huser->managements; manager; manager = manager->next) {
+ if(manager->type == 1 && manager->object == tlfh) {
+ reply("HSMSG_MANAGER_ALREADY", hi->handle, "*", tlfh_name);
+ return 0;
+ }
+ }
+ if(slfh)
+ hs_add_manager_secondlevel(slfh, huser);
+ else
+ hs_add_manager_toplevel(tlfh, huser);
+ reply("HSMSG_MANAGER_ADDED", hi->handle, slfh_name, tlfh_name);