src/shepp/DomainFunctions.H

Go to the documentation of this file.
00001 /* ${copyright}$ */
00002 /* $Id: DomainFunctions.H 1006 2009-02-19 20:29:57Z rafael $ */
00006 #ifndef __DOMAIN_FUNCTIONS_H__
00007 #define __DOMAIN_FUNCTIONS_H__
00008 #include "SheppCommandFunctions.H"
00009 
00010 #if USE_BR_DOMAINS
00011 #include "BrDomainCheck.H"
00012 #include "BrDomainInfo.H"
00013 #include "BrDomainCreate.H"
00014 #include "BrDomainUpdate.H"
00015 #include "BrDomainRenew.H"
00016 #else
00017 #include "DomainCheck.H"
00018 #include "DomainInfo.H"
00019 #include "DomainCreate.H"
00020 #include "DomainUpdate.H"
00021 #include "DomainRenew.H"
00022 #endif //USE_BR_DOMAINS
00023 
00024 #include "DomainDelete.H"
00025 #include "RegistrationPeriod.H"
00026 
00028 
00033 int cmd_domain_help(string error_msg, string specific = "")
00034 {
00035   if (error_msg != "") {
00036     printf("error: %s\n", error_msg.c_str());
00037   }
00038 
00039   printf("domain command syntax help:\n");
00040   printf("\n");
00041 
00042   if (specific == "" || specific == "check") {
00043     printf("  check <domain1> [domain2 ... domainN]"
00044 #if USE_BR_DOMAINS
00045            " [-o organization]"
00046 #endif //USE_BR_DOMAINS
00047            "\n");
00048    
00049     printf("\n");
00050   }
00051   if (specific == "" || specific == "info") {
00052     printf("  info <domain> [-auth authInfoPw[:authInfoRoid]]"
00053 #if USE_BR_DOMAINS
00054            " [-t ticketNumber]"
00055 #endif //USE_BR_DOMAINS
00056            "\n");
00057     printf("\n");
00058   }
00059   if (specific == "" || specific == "transfer") {
00060     printf("  transfer: not implemented\n");
00061     printf("\n");
00062   }
00063   if (specific == "" || specific == "create") {
00064     printf("  create <domain> [-period time:unit]\n"
00065            "    [-ns nameserver[,ipversion:ipaddr][, ...] ...] "
00066            "[-r registrant]"
00067            "\n    [-contact type=value ...] [-auth authInfoPw[:authInfoRoid]]"
00068            "\n    [-ds <keyTag> <alg> <digestType> <digest> "
00069            "[-maxlife <maxSigLife>]"
00070            "\n         [-keyData <flags> <protocol> <alg> <pubKey>] ...] "
00071 #if USE_BR_DOMAINS
00072            "\n    <-o organization> [-rpflags flag1:flag2:flag3]"
00073            "\n    [-auto-renew <on|off>]"
00074 #endif //USE_BR_DOMAINS
00075            "\n");
00076 
00077     printf("\n");
00078   }
00079   if (specific == "" || specific == "delete") {
00080     printf("  delete <domain>\n");
00081     printf("\n");
00082   }
00083   if (specific == "" || specific == "renew") {
00084     printf("  renew <domain> <-expdate curExpDate> [-period time:unit]\n");
00085     printf("\n");
00086   }
00087   if (specific == "" || specific == "update") {
00088     printf("  update <domain>\n"
00089            "    [-add-ns nameserver[,ipversion:ipaddr][, ...] ...]\n"
00090            "    [-add-contact type=value ...]\n"
00091            "    [-add-status status:lang:\"description\" ...]\n"
00092            "    [-add-ds <keyTag> <alg> <digestType> <digest> "
00093            "[-maxlife <maxSigLife>]\n"
00094            "        [-keyData <flags> <protocol> <alg> <pubKey>] ...]\n"
00095            "    [-secDNS-urgent]\n"
00096            "    [-rem-ns nameserver[,ipversion:ipaddr][, ...] ...]\n"
00097            "    [-rem-contact type=value ...]\n"
00098            "    [-rem-status status ...]\n"
00099            "    [-rem-ds <keyTag>]\n"
00100            "    [-chg-ds <keyTag> <alg> <digestType> <digest> "
00101            "[-maxlife <maxSigLife>]\n"
00102            "        [-keyData <flags> <protocol> <alg> <pubKey>] ...]\n"
00103 
00104            "    [-r registrant] [-auth authInfoPw[:authInfoRoid]]"
00105            
00106 #if USE_BR_DOMAINS
00107            "\n    [-t ticketNumber] [-rpflags flag1:flag2:flag3]"
00108            "\n    [-auto-renew <on|off>]"
00109 #endif //USE_BR_DOMAINS
00110            "\n");
00111     printf("\n");
00112   }
00113 
00114   if (error_msg != "") {
00115     return -1;
00116   }
00117 
00118   return 0;
00119 }
00120 
00122 
00126 int cmd_domain_check(vector<string> &args)
00127 {
00128 #if USE_BR_DOMAINS
00129   BrDomainCheck act;
00130   BrDomainCheckCmd *cmd = act.get_command();
00131 #else
00132   DomainCheck act;
00133   DomainCheckCmd *cmd = act.get_command();
00134 #endif //USE_BR_DOMAINS
00135   string cmd_name = "check";
00136 
00137   while (!args.empty()) {
00138 #if USE_BR_DOMAINS
00139     if (args[0] == "-o") {
00140       // set organization
00141       args.erase(args.begin());
00142       if (args.empty()) {
00143         return cmd_domain_help("organization parameter missing", cmd_name);
00144       }
00145       cmd->set_organization(args[0]);
00146       args.erase(args.begin());
00147     } else {
00148 #endif //USE_BR_DOMAINS
00149       // insert domains
00150       cmd->insert_domain(args[0]);
00151       args.erase(args.begin());
00152 #if USE_BR_DOMAINS
00153     }
00154 #endif //USE_BR_DOMAINS
00155   }
00156 
00157   if (cmd->get_domains_list().empty()) {
00158     return cmd_domain_help("no domain names specified", cmd_name);
00159   }
00160 
00161   if (_debug) {
00162     set<string> domains = cmd->get_domains_list();
00163     set<string>::const_iterator it;
00164     printf("names to be checked:\n");
00165     for (it = domains.begin(); it != domains.end(); it++) {
00166       printf("  [%s]\n", (*it).c_str());
00167     }
00168     
00169 #if USE_BR_DOMAINS
00170     if (cmd->get_organization() != "") {
00171       printf("  organization: [%s]\n", cmd->get_organization().c_str());
00172     }
00173 #endif //USE_BR_DOMAINS
00174   } // _debug
00175 
00176   if (process_action(act) != 0) {
00177     return -1;
00178   }
00179 
00180   return 0;
00181 }
00182 
00184 
00188 int cmd_domain_info(vector<string> &args)
00189 {
00190 #if USE_BR_DOMAINS
00191   BrDomainInfo act;
00192   BrDomainInfoCmd *cmd = act.get_command();
00193 #else
00194   DomainInfo act;
00195   DomainInfoCmd *cmd = act.get_command();
00196 #endif //USE_BR_DOMAINS
00197   string cmd_name = "info";
00198 
00199   if (args.empty()) {
00200     return cmd_domain_help("no domain name specified", cmd_name);
00201   }
00202   
00203   // domain name MUST be the first attribute
00204   cmd->set_name(args[0]);
00205   args.erase(args.begin());
00206 
00207   while (!args.empty()) {
00208     if (args[0] == "-auth") {
00209       // set authInfo
00210       AuthInfo auth;
00211       if (SheppObjSet::authInfo(auth, args) != 0) {
00212         return cmd_domain_help("invalid auth", cmd_name);
00213       }
00214       cmd->set_authInfo(auth);
00215 #if USE_BR_DOMAINS
00216     } else if (args[0] == "-t") {
00217       // ticketNumber
00218       args.erase(args.begin());
00219       if (args.empty()) {
00220         return cmd_domain_help("ticket number parameter missing", cmd_name);
00221       }
00222       if (atoi(args[0].c_str()) <= 0) {
00223         return cmd_domain_help("ticket parameter must be a positive integer",
00224                                cmd_name);
00225       }
00226       cmd->set_ticketNumber(atoi(args[0].c_str()));
00227       args.erase(args.begin());
00228 #endif //USE_BR_DOMAINS
00229     } else {
00230       return cmd_domain_help("invalid syntax near \"" + args[0] + "\"",
00231                              cmd_name);
00232     }
00233   }
00234 
00235   if (_debug) {
00236     printf("name to get info: [%s]\n", cmd->get_name().c_str());
00237 
00238 #if USE_BR_DOMAINS
00239     if (cmd->get_ticketNumber() != 0) {
00240       printf("  ticketNumber: [%d]\n", cmd->get_ticketNumber());
00241     }
00242 #endif //USE_BR_DOMAINS
00243     
00244     SheppPrint::authInfo(cmd->get_authInfo());
00245   } // _debug
00246 
00247   if (process_action(act) != 0) {
00248     return -1;
00249   }
00250 
00251   return 0;
00252 }
00253 
00255 
00259 int cmd_domain_transfer(vector<string> &args)
00260 {
00261   string cmd_name = "transfer";
00262   return cmd_domain_help("", cmd_name);
00263 }
00264 
00266 
00270 int cmd_domain_create(vector<string> &args)
00271 {
00272 #if USE_BR_DOMAINS
00273   BrDomainCreate act;
00274   BrDomainCreateCmd *cmd = act.get_command();
00275 #else
00276   DomainCreate act;
00277   DomainCreateCmd *cmd = act.get_command();
00278 #endif //USE_BR_DOMAINS
00279   string cmd_name = "create";
00280 
00281   if (args.empty()) {
00282     return cmd_domain_help("domain name missing", cmd_name);
00283   }
00284   // domain name MUST be the first attribute
00285   cmd->set_name(args[0]);
00286   args.erase(args.begin());
00287 
00288   while (!args.empty()) {
00289     if (args[0] == "-period") {
00290       //registration period
00291       args.erase(args.begin());
00292       if (args.empty()) {
00293         return cmd_domain_help("period parameter missing", cmd_name);
00294       }
00295 
00296       string time;
00297       string unit;
00298       if (SheppStrUtil::split(args[0], time, unit, ":", false) != 0) {
00299         return cmd_domain_help("invalid period", cmd_name);
00300       }
00301 
00302       cmd->set_period(atoi(time.c_str()), unit);
00303       args.erase(args.begin());
00304     } else if (args[0] == "-ns") {
00305       //nameserver
00306       NameServer ns;
00307       if (SheppObjSet::nameServer(ns, args) != 0) {
00308         return cmd_domain_help("invalid nameserver", cmd_name);
00309       }
00310       cmd->insert_nameserver(ns);
00311     } else if (args[0] == "-r") {
00312       //registrant
00313       args.erase(args.begin());
00314       if (args.empty()) {
00315         return cmd_domain_help("registrant parameter missing", cmd_name);
00316       }
00317       cmd->set_registrant(args[0]);
00318       args.erase(args.begin());
00319     } else if (args[0] == "-contact") {
00320       //contact
00321       args.erase(args.begin());
00322       if (args.empty()) {
00323         return cmd_domain_help("contact parameter missing", cmd_name);
00324       }
00325 
00326       string type;
00327       string value;
00328       if (SheppStrUtil::split(args[0], type, value, "=", false) != 0) {
00329         return cmd_domain_help("invalid contact", cmd_name);
00330       }
00331 
00332       cmd->insert_contact(type, value);
00333       args.erase(args.begin());      
00334 
00335     } else if (args[0] == "-auth") {
00336       //authInfo
00337       AuthInfo auth;
00338       if (SheppObjSet::authInfo(auth, args) != 0) {
00339         return cmd_domain_help("invalid auth", cmd_name);
00340       }
00341       cmd->set_authInfo(auth);
00342     } else if (args[0] == "-ds") {
00343       //DNSSEC data
00344       DSInfo ds;
00345       string error_msg;
00346       if (SheppObjSet::dsInfo(ds, args, error_msg) != 0) {
00347         return cmd_domain_help(error_msg, cmd_name);
00348       }
00349       cmd->add_dsInfo(ds);
00350 #if USE_BR_DOMAINS
00351     } else if (args[0] == "-o") {
00352       //organization
00353       args.erase(args.begin());
00354       if (args.empty()) {
00355         return cmd_domain_help("organization parameter missing", cmd_name);
00356       }
00357       cmd->set_organization(args[0]);
00358       args.erase(args.begin());
00359     } else if (args[0] == "-rpflags") {
00360       //releaseProcessFlags
00361       args.erase(args.begin());
00362       if (args.empty()) {
00363         return cmd_domain_help("rpflags parameter missing", cmd_name);
00364       }
00365       ReleaseProcessFlags rpf;
00366       string flag1;
00367       string flag2;
00368       string flag3;
00369 
00370       if (SheppStrUtil::split(args[0], flag1, flag2, ":", false) != 0) {
00371         return cmd_domain_help("invalid rpflags", cmd_name);
00372       }
00373 
00374       if (SheppStrUtil::split(flag2, flag2, flag3, ":", false) != 0) {
00375         return cmd_domain_help("invalid rpflags", cmd_name);
00376       }
00377       
00378       rpf.flag1 = (flag1 == "0") ? 0 : 1;
00379       rpf.flag2 = (flag2 == "0") ? 0 : 1;
00380       rpf.flag3 = (flag3 == "0") ? 0 : 1;
00381 
00382       cmd->set_releaseProcessFlags(rpf);
00383       args.erase(args.begin());
00384     } else if (args[0] == "-auto-renew") {
00385       //auto-renew
00386       args.erase(args.begin());
00387       if (args.empty()) {
00388         return cmd_domain_help("auto-renew parameter missing", cmd_name);
00389       }
00390       if (args[0] == "on") {
00391         cmd->set_auto_renew(1);
00392       } else if (args[0] == "off") {
00393         cmd->set_auto_renew(0);
00394       } else {
00395         return cmd_domain_help("invalid auto-renew", cmd_name);
00396       }
00397       args.erase(args.begin());
00398 #endif //USE_BR_DOMAINS
00399     } else {
00400       return cmd_domain_help("invalid syntax near \"" + args[0] + "\"",
00401                              cmd_name);
00402     }
00403   }
00404 #if USE_BR_DOMAINS
00405   if (cmd->get_organization() == "") {
00406     return cmd_domain_help("organization is mandatory", cmd_name);
00407   }
00408 #endif //USE_BR_DOMAINS
00409 
00410   if (_debug) {
00411     printf("creating domain: %s\n", cmd->get_name().c_str());
00412     
00413 #if USE_BR_DOMAINS
00414     printf("  organization: %s\n", cmd->get_organization().c_str());
00415 #endif //USE_BR_DOMAINS
00416     
00417     if (cmd->get_period().time != 0) {
00418       printf("  period: %d %s\n", cmd->get_period().time,
00419              cmd->get_period().unit.c_str());
00420     }
00421     
00422     vector<NameServer> nss = cmd->get_nameservers();
00423     vector<NameServer>::const_iterator nsit;
00424     for (nsit = nss.begin(); nsit != nss.end(); nsit++) {
00425       SheppPrint::nameserver(*nsit);
00426     }
00427     
00428     if (cmd->get_registrant() != "") {
00429       printf("  registrant: %s\n", cmd->get_registrant().c_str());
00430     }
00431     
00432     map< string, string, less<string> > contacts = cmd->get_contacts();
00433     map< string, string, less<string> >::const_iterator cit;
00434     for (cit = contacts.begin(); cit != contacts.end(); cit++) {
00435       printf("  contact %s: %s\n", (*cit).first.c_str(), (*cit).second.c_str());
00436     }
00437     
00438     SheppPrint::authInfo(cmd->get_authInfo());
00439     
00440 #if USE_BR_DOMAINS
00441     if (cmd->get_releaseProcessFlags().flag1 == 1 ||
00442         cmd->get_releaseProcessFlags().flag2 == 1 ||
00443         cmd->get_releaseProcessFlags().flag3 == 1) {
00444       printf("  releaseProcessFlags: %d, %d, %d\n",
00445              cmd->get_releaseProcessFlags().flag1,
00446              cmd->get_releaseProcessFlags().flag2,
00447              cmd->get_releaseProcessFlags().flag3);
00448     }
00449 
00450     printf("  auto-renew: %d\n", cmd->get_auto_renew());
00451 #endif //USE_BR_DOMAINS
00452   } // _debug
00453 
00454   if (process_action(act) != 0) {
00455     return -1;
00456   }
00457   
00458   return 0;
00459 }
00460 
00462 
00466 int cmd_domain_delete(vector<string> &args)
00467 {
00468   DomainDelete act;
00469   DomainDeleteCmd *cmd = act.get_command();
00470 
00471   string cmd_name = "delete";
00472 
00473   if (args.empty()) {
00474     return cmd_domain_help("domain name missing", cmd_name);
00475   }
00476   
00477   // domain name MUST be the first attribute
00478   cmd->set_name(args[0]);
00479   args.erase(args.begin());
00480 
00481   if (_debug) {
00482     printf("deleting domain: %s\n", cmd->get_name().c_str());
00483   }
00484 
00485   if (process_action(act) != 0) {
00486     return -1;
00487   }
00488   
00489   return 0;
00490 }
00491 
00493 
00497 int cmd_domain_renew(vector<string> &args)
00498 {
00499 #if USE_BR_DOMAINS
00500   BrDomainRenew act;
00501 #else
00502   DomainRenew act;
00503 #endif //USE_BR_DOMAINS
00504   DomainRenewCmd *cmd = act.get_command();
00505   string cmd_name = "renew";
00506 
00507   if (args.empty()) {
00508     return cmd_domain_help("domain name missing", cmd_name);
00509   }
00510   // domain name MUST be the first attribute
00511   cmd->set_name(args[0]);
00512   args.erase(args.begin());
00513 
00514   while (!args.empty()) {
00515     if (args[0] == "-expdate") {
00516       //-expdate
00517       args.erase(args.begin());
00518       if (args.empty()) {
00519         return cmd_domain_help("curExpDate missing", cmd_name);
00520       }
00521       cmd->set_curExpDate(args[0]);
00522       args.erase(args.begin());      
00523     } else if (args[0] == "-period") {
00524       args.erase(args.begin());      
00525       if (args.empty()) {
00526         return cmd_domain_help("period missing", cmd_name);
00527       }
00528       string str_time;
00529       string unit;
00530       if (SheppStrUtil::split(args[0], str_time, unit, ":", false) != 0) {
00531         return cmd_domain_help("error setting period", cmd_name);
00532       }
00533       RegistrationPeriod period;
00534       period.time = atoi(str_time.c_str());
00535       period.unit = unit;
00536       cmd->set_period(period);
00537       args.erase(args.begin());
00538     } else {
00539       return cmd_domain_help("invalid syntax near \"" + args[0] + "\"",
00540                              cmd_name);
00541     }
00542   }
00543 
00544   if (cmd->get_curExpDate() == "") {
00545     return cmd_domain_help("curExpDate is mandatory", cmd_name);
00546   }
00547 
00548   if (_debug) {
00549     printf("domain to renew: [%s]\n", cmd->get_name().c_str());
00550     printf("  curExpDate   : [%s]\n", cmd->get_curExpDate().c_str());
00551     if (cmd->get_period().time != 0 || cmd->get_period().unit != "") {
00552       printf("  period       : [%d %s]\n", cmd->get_period().time,
00553              cmd->get_period().unit.c_str());
00554     }
00555   } //_debug
00556 
00557   if (process_action(act) != 0) {
00558     return -1;
00559   }
00560 
00561   return 0;
00562 }
00563 
00565 
00569 int cmd_domain_update(vector<string> &args)
00570 {
00571 #if USE_BR_DOMAINS
00572   BrDomainUpdate act;
00573   BrDomainUpdateCmd *cmd = act.get_command();
00574 #else
00575   DomainUpdate act;
00576   DomainUpdateCmd *cmd = act.get_command();
00577 #endif //USE_BR_DOMAINS
00578   string cmd_name = "update";
00579 
00580   if (args.empty()) {
00581     return cmd_domain_help("domain name missing", cmd_name);
00582   }
00583   // domain name MUST be the first attribute
00584   cmd->set_name(args[0]);
00585   args.erase(args.begin());
00586 
00587   while (!args.empty()) {
00588     if (args[0] == "-add-ns") {
00589       //nameserver to add
00590       NameServer ns;
00591       if (SheppObjSet::nameServer(ns, args) != 0) {
00592         return cmd_domain_help("invalid nameserver to add", cmd_name);
00593       }
00594       cmd->insert_nameserver_add(ns);
00595     } else if (args[0] == "-rem-ns") {
00596       //nameserver to remove
00597       NameServer ns;
00598       if (SheppObjSet::nameServer(ns, args) != 0) {
00599         return cmd_domain_help("invalid nameserver to remove", cmd_name);
00600       }
00601       cmd->insert_nameserver_rem(ns);
00602     } else if (args[0] == "-add-contact") {
00603       //contact to add
00604       args.erase(args.begin());
00605       if (args.empty()) {
00606         return cmd_domain_help("add-contact parameter missing", cmd_name);
00607       }
00608 
00609       string type;
00610       string value;
00611       if (SheppStrUtil::split(args[0], type, value, "=", false) != 0) {
00612         return cmd_domain_help("invalid contact to add", cmd_name);
00613       }
00614 
00615       cmd->insert_contact_add(type, value);
00616       args.erase(args.begin());      
00617 
00618     } else if (args[0] == "-rem-contact") {
00619       //contact to remove
00620       args.erase(args.begin());
00621       if (args.empty()) {
00622         return cmd_domain_help("rem-contact parameter missing", cmd_name);
00623       }
00624 
00625       string type;
00626       string value;
00627       if (SheppStrUtil::split(args[0], type, value, "=", false) != 0) {
00628         return cmd_domain_help("invalid contact to remove", cmd_name);
00629       }
00630 
00631       cmd->insert_contact_rem(type, value);
00632       args.erase(args.begin());      
00633 
00634     } else if (args[0] == "-add-status") {
00635       //status to add
00636       args.erase(args.begin());
00637       if (args.empty()) {
00638         return cmd_domain_help("add-status parameter missing", cmd_name);
00639       }
00640 
00641       DomainUpdateCmd::Status st;
00642       if (SheppObjSet::status(st, args) != 0) {
00643         return cmd_domain_help("invalid status to add", cmd_name);
00644       }
00645       cmd->insert_status_add(st);
00646 
00647     } else if (args[0] == "-rem-status") {
00648       //status to remove
00649       args.erase(args.begin());
00650       if (args.empty()) {
00651         return cmd_domain_help("rem-status parameter missing", cmd_name);
00652       }
00653 
00654       DomainUpdateCmd::Status st;
00655       st.s = args[0];
00656       args.erase(args.begin());
00657 
00658       cmd->insert_status_rem(st);
00659 
00660     } else if (args[0] == "-add-ds") {
00661       //DS to add
00662       DSInfo ds;
00663       string error_msg;
00664       if (SheppObjSet::dsInfo(ds, args, error_msg) != 0) {
00665         return cmd_domain_help(error_msg, cmd_name);
00666       }
00667       cmd->insert_ds_add(ds);
00668     } else if (args[0] == "-rem-ds") {
00669       //DS to remove
00670       args.erase(args.begin());
00671       if (args.empty()) {
00672         return cmd_domain_help("rem-ds parameter missing", cmd_name);
00673       }
00674       cmd->insert_ds_rem(atoi(args[0].c_str()));
00675       args.erase(args.begin());
00676     } else if (args[0] == "-chg-ds") {
00677       //DS to change
00678       DSInfo ds;
00679       string error_msg;
00680       if (SheppObjSet::dsInfo(ds, args, error_msg) != 0) {
00681         return cmd_domain_help(error_msg, cmd_name);
00682       }
00683       cmd->insert_ds_chg(ds);
00684     } else if (args[0] == "-secDNS-urgent") {
00685       cmd->setUrgentFlag(true);
00686       args.erase(args.begin());
00687     } else if (args[0] == "-r") {
00688       //registrant
00689       args.erase(args.begin());
00690       if (args.empty()) {
00691         return cmd_domain_help("registrant parameter missing", cmd_name);
00692       }
00693       cmd->set_registrant(args[0]);
00694       args.erase(args.begin());
00695     } else if (args[0] == "-auth") {
00696       //authInfo
00697       AuthInfo auth;
00698       if (SheppObjSet::authInfo(auth, args) != 0) {
00699         return cmd_domain_help("invalid auth", cmd_name);
00700       }
00701       cmd->set_authInfo(auth);
00702 #if USE_BR_DOMAINS
00703     } else if (args[0] == "-t") {
00704       // ticketNumber
00705       args.erase(args.begin());
00706       if (args.empty()) {
00707         return cmd_domain_help("ticket number parameter missing", cmd_name);
00708       }
00709       if (atoi(args[0].c_str()) <= 0) {
00710         return cmd_domain_help("ticket parameter must be a positive integer",
00711                                cmd_name);
00712       }
00713       cmd->set_ticketNumber(atoi(args[0].c_str()));
00714       args.erase(args.begin());
00715     } else if (args[0] == "-rpflags") {
00716       //releaseProcessFlags
00717       args.erase(args.begin());
00718       if (args.empty()) {
00719         return cmd_domain_help("rpflags parameter missing", cmd_name);
00720       }
00721       ReleaseProcessFlags rpf;
00722       string flag1;
00723       string flag2;
00724       string flag3;
00725 
00726       if (SheppStrUtil::split(args[0], flag1, flag2, ":", false) != 0) {
00727         return cmd_domain_help("invalid rpflags", cmd_name);
00728       }
00729 
00730       if (SheppStrUtil::split(flag2, flag2, flag3, ":", false) != 0) {
00731         return cmd_domain_help("invalid rpflags", cmd_name);
00732       }
00733       
00734       if (flag1 == "0" || flag1 == "1") {
00735         rpf.flag1 = atoi(flag1.c_str());
00736       } else if (flag1 != "-1") {
00737         return cmd_domain_help("rpflags invalid parameter. "
00738                                "Expected '-1', '0' or '1'.", cmd_name);
00739       }
00740       if (flag2 == "0" || flag2 == "1") {
00741         rpf.flag2 = atoi(flag2.c_str());
00742       } else if (flag2 != "-1") {
00743         return cmd_domain_help("rpflags invalid parameter. "
00744                                "Expected '-1', '0' or '1'.", cmd_name);
00745       }
00746       if (flag3 == "0" || flag3 == "1") {
00747         rpf.flag3 = atoi(flag3.c_str());
00748       } else if (flag3 != "-1") {
00749         return cmd_domain_help("rpflags invalid parameter. "
00750                                "Expected '-1', '0' or '1'.", cmd_name);
00751       }
00752 
00753       cmd->set_releaseProcessFlags(rpf);
00754       args.erase(args.begin());
00755     } else if (args[0] == "-auto-renew") {
00756       //auto-renew
00757       args.erase(args.begin());
00758       if (args.empty()) {
00759         return cmd_domain_help("auto-renew parameter missing", cmd_name);
00760       }
00761       if (args[0] == "on") {
00762         cmd->set_auto_renew(1);
00763       } else if (args[0] == "off") {
00764         cmd->set_auto_renew(0);
00765       } else {
00766         return cmd_domain_help("invalid auto-renew", cmd_name);
00767       }
00768       args.erase(args.begin());
00769 #endif //USE_BR_DOMAINS
00770     } else {
00771       return cmd_domain_help("invalid syntax near \"" + args[0] + "\"",
00772                              cmd_name);
00773     }
00774   }
00775 
00776 #if USE_BR_DOMAINS
00777   bool brdomain_rpf_update = false;
00778   //if it has brdomain attributes set it MUST have ticketNumber also
00779   if (cmd->get_releaseProcessFlags().flag1 != -1 ||
00780       cmd->get_releaseProcessFlags().flag2 != -1 ||
00781       cmd->get_releaseProcessFlags().flag3 != -1) {
00782     brdomain_rpf_update = true;
00783   }
00784 
00785   if (brdomain_rpf_update && cmd->get_ticketNumber() == 0) {
00786     return cmd_domain_help("BrDomain extension rpf updates "
00787                            "MUST contain ticketNumber", cmd_name);
00788   }
00789 #endif //USE_BR_DOMAINS
00790 
00791   if (cmd->get_nameserver_add().empty() &&
00792       cmd->get_nameserver_rem().empty() &&
00793       cmd->get_ds_add().empty() &&
00794       cmd->get_ds_rem().empty() &&
00795       cmd->get_ds_chg().empty() &&
00796       cmd->get_contact_add().empty() &&
00797       cmd->get_contact_rem().empty() &&
00798       cmd->get_status_add().empty() &&
00799       cmd->get_status_rem().empty() &&
00800       cmd->get_registrant() == "" &&
00801       cmd->get_authInfo().get_pw() == ""
00802 #if USE_BR_DOMAINS
00803       && !brdomain_rpf_update && cmd->get_auto_renew() == -1
00804 #endif //USE_BR_DOMAINS
00805       ) {
00806     return cmd_domain_help("you didn't set a thing", cmd_name);
00807   }
00808 
00809   if (_debug) {
00810     printf("updating domain: %s\n", cmd->get_name().c_str());
00811     
00812     vector<NameServer> nss = cmd->get_nameserver_add();
00813     vector<NameServer>::const_iterator nsit;
00814     if (!nss.empty()) {
00815       printf("  nameservers to add:\n");
00816     }
00817     for (nsit = nss.begin(); nsit != nss.end(); nsit++) {
00818       SheppPrint::nameserver(*nsit);
00819     }
00820     
00821     nss = cmd->get_nameserver_rem();
00822     if (!nss.empty()) {
00823       printf("  nameservers to remove:\n");
00824     }
00825     for (nsit = nss.begin(); nsit != nss.end(); nsit++) {
00826       SheppPrint::nameserver(*nsit);
00827     }
00828     
00829     if (cmd->get_registrant() != "") {
00830       printf("  registrant: %s\n", cmd->get_registrant().c_str());
00831     }
00832     
00833     map< string, string, less<string> > contacts = cmd->get_contact_add();
00834     map< string, string, less<string> >::const_iterator cit;
00835     if (!contacts.empty()) {
00836       printf("  contacts to add:\n");
00837     }
00838     for (cit = contacts.begin(); cit != contacts.end(); cit++) {
00839       printf("  contact %s: %s\n", (*cit).first.c_str(),
00840              (*cit).second.c_str());
00841     }
00842     
00843     contacts = cmd->get_contact_rem();
00844     if (!contacts.empty()) {
00845       printf("  contacts to remove:\n");
00846     }
00847     for (cit = contacts.begin(); cit != contacts.end(); cit++) {
00848       printf("  contact %s: %s\n", (*cit).first.c_str(),
00849              (*cit).second.c_str());
00850     }
00851     
00852     set<DomainUpdateCmd::Status> statuses = cmd->get_status_add();
00853     set<DomainUpdateCmd::Status>::const_iterator stit;
00854     if (!statuses.empty()) {
00855       printf("  status to add:\n");
00856     }
00857     for (stit = statuses.begin(); stit != statuses.end(); stit++) {
00858       printf("    s   : [%s]\n", (*stit).s.c_str());
00859       printf("    lang: [%s]\n", (*stit).lang.c_str());
00860       printf("    msg : [%s]\n", (*stit).msg.c_str());
00861     }
00862     statuses = cmd->get_status_rem();
00863     if (!statuses.empty()) {
00864       printf("  status to remove:\n");
00865     }
00866     for (stit = statuses.begin(); stit != statuses.end(); stit++) {
00867       printf("    s   : [%s]\n", (*stit).s.c_str());
00868       printf("    lang: [%s]\n", (*stit).lang.c_str());
00869       printf("    msg : [%s]\n", (*stit).msg.c_str());
00870     }
00871     
00872     SheppPrint::authInfo(cmd->get_authInfo());
00873     
00874 #if USE_BR_DOMAINS
00875     if (cmd->get_ticketNumber() != 0) {
00876       printf("  ticketNumber: [%d]\n", cmd->get_ticketNumber());
00877     }
00878     
00879     if (cmd->get_releaseProcessFlags().flag1 != -1 ||
00880         cmd->get_releaseProcessFlags().flag2 != -1 ||
00881         cmd->get_releaseProcessFlags().flag3 != -1) {
00882       printf("  releaseProcessFlags: %d, %d, %d\n",
00883              cmd->get_releaseProcessFlags().flag1,
00884              cmd->get_releaseProcessFlags().flag2,
00885              cmd->get_releaseProcessFlags().flag3);
00886     }
00887 
00888     printf("  auto-renew: %d\n", cmd->get_auto_renew());
00889 #endif //USE_BR_DOMAINS
00890   } // _debug
00891 
00892   if (process_action(act) != 0) {
00893     return -1;
00894   }
00895 
00896   return 0;
00897 }
00898 
00900 
00904 int cmd_domain(vector<string> &args)
00905 {
00906   // domain command processing
00907   if (!args.empty() && !(args[0] == "help")) {
00908     if (args[0] == "check") {
00909       args.erase(args.begin());
00910       return cmd_domain_check(args);
00911     } else if (args[0] == "info") {
00912       args.erase(args.begin());
00913       return cmd_domain_info(args);
00914     } else if (args[0] == "transfer") {
00915       args.erase(args.begin());
00916       return cmd_domain_transfer(args);
00917     } else if (args[0] == "create") {
00918       args.erase(args.begin());
00919       return cmd_domain_create(args);
00920     } else if (args[0] == "delete") {
00921       args.erase(args.begin());
00922       return cmd_domain_delete(args);
00923     } else if (args[0] == "renew") {
00924       args.erase(args.begin());
00925       return cmd_domain_renew(args);
00926     } else if (args[0] == "update") {
00927       args.erase(args.begin());
00928       return cmd_domain_update(args);
00929     } else {
00930       return cmd_domain_help("invalid command: domain " + args[0]);
00931     }
00932   }
00933   
00934   return cmd_domain_help("");
00935 }
00936 
00937 #endif //__DOMAIN_FUNCTIONS_H__

Generated on Tue Mar 17 16:03:07 2009 for libepp_nicbr by  doxygen 1.4.7