src/shepp/DomainFunctions.H

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

Generated on Tue Mar 20 13:02:18 2007 for libepp_nicbr by  doxygen 1.4.7