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