static void usage_all(void) { (void) fprintf(stderr, gettext("Usage:\n")); usage_create(B_FALSE); usage_delete(B_FALSE); (void) fprintf(stderr, "ksslcfg -V\n"); (void) fprintf(stderr, "ksslcfg -?\n"); }
int exec_create(int argc, char **argv) { match_t match = MATCH_EXACT; const char *outdir = NULL; const char *format = NULL; const char *rootdir = NULL; const char *manifestdir = NULL; char *plist = NULL; bool overwrite = true; pkg_formats fmt; int ch; bool old = false; while ((ch = getopt(argc, argv, "agxf:r:m:o:np:O")) != -1) { switch (ch) { case 'a': match = MATCH_ALL; break; case 'g': match = MATCH_GLOB; break; case 'x': match = MATCH_REGEX; break; case 'f': format = optarg; break; case 'o': outdir = optarg; break; case 'r': rootdir = optarg; break; case 'm': manifestdir = optarg; break; case 'n': overwrite = false; break; case 'p': plist = optarg; break; case 'O': old = true; break; } } argc -= optind; argv += optind; if (match != MATCH_ALL && manifestdir == NULL && argc == 0) { usage_create(); return (EX_USAGE); } if (outdir == NULL) outdir = "./"; if (format == NULL) { fmt = old ? TBZ : TXZ; } else { if (format[0] == '.') ++format; if (strcmp(format, "txz") == 0) fmt = TXZ; else if (strcmp(format, "tbz") == 0) fmt = TBZ; else if (strcmp(format, "tgz") == 0) fmt = TGZ; else if (strcmp(format, "tar") == 0) fmt = TAR; else { warnx("unknown format %s, using txz", format); fmt = old ? TBZ : TXZ; } } if (manifestdir == NULL) { if (!old) { warnx("Can only create an old package format" "out of a staged directory"); return (EX_SOFTWARE); } return (pkg_create_matches(argc, argv, match, fmt, outdir, rootdir, overwrite) == EPKG_OK ? EX_OK : EX_SOFTWARE); } else { return (pkg_create_staged(outdir, fmt, rootdir, manifestdir, plist, old) == EPKG_OK ? EX_OK : EX_SOFTWARE); } }
int exec_create(int argc, char **argv) { match_t match = MATCH_EXACT; const char *outdir = NULL; const char *format = NULL; const char *rootdir = NULL; const char *metadatadir = NULL; const char *manifest = NULL; char *plist = NULL; pkg_formats fmt; int ch; bool overwrite = true; bool hash = false; /* POLA: pkg create is quiet by default, unless * PKG_CREATE_VERBOSE is set in pkg.conf. This is for * historical reasons. */ quiet = !pkg_object_bool(pkg_config_get("PKG_CREATE_VERBOSE")); struct option longopts[] = { { "all", no_argument, NULL, 'a' }, { "format", required_argument, NULL, 'f' }, { "glob", no_argument, NULL, 'g' }, { "hash", no_argument, NULL, 'h' }, { "regex", no_argument, NULL, 'x' }, { "root-dir", required_argument, NULL, 'r' }, { "metadata", required_argument, NULL, 'm' }, { "manifest", required_argument, NULL, 'M' }, { "no-clobber", no_argument, NULL, 'n' }, { "out-dir", required_argument, NULL, 'o' }, { "plist", required_argument, NULL, 'p' }, { "quiet", no_argument, NULL, 'q' }, { "verbose", no_argument, NULL, 'v' }, { NULL, 0, NULL, 0 }, }; while ((ch = getopt_long(argc, argv, "+aghxf:r:m:M:o:np:qv", longopts, NULL)) != -1) { switch (ch) { case 'a': match = MATCH_ALL; break; case 'f': format = optarg; break; case 'g': match = MATCH_GLOB; break; case 'h': hash = true; break; case 'm': metadatadir = optarg; break; case 'M': manifest = optarg; break; case 'n': overwrite = false; break; case 'o': outdir = optarg; break; case 'p': plist = optarg; break; case 'q': quiet = true; break; case 'r': rootdir = optarg; break; case 'v': quiet = false; break; case 'x': match = MATCH_REGEX; break; default: usage_create(); return (EX_USAGE); } } argc -= optind; argv += optind; if (match != MATCH_ALL && metadatadir == NULL && manifest == NULL && argc == 0) { usage_create(); return (EX_USAGE); } if (metadatadir == NULL && manifest == NULL && rootdir != NULL) { warnx("Do not specify a rootdir without also specifying " "either a metadatadir or manifest"); usage_create(); return (EX_USAGE); } if (outdir == NULL) outdir = "./"; if (format == NULL) { fmt = TXZ; } else { if (format[0] == '.') ++format; if (strcmp(format, "txz") == 0) fmt = TXZ; else if (strcmp(format, "tbz") == 0) fmt = TBZ; else if (strcmp(format, "tgz") == 0) fmt = TGZ; else if (strcmp(format, "tar") == 0) fmt = TAR; else { warnx("unknown format %s, using txz", format); fmt = TXZ; } } if (metadatadir == NULL && manifest == NULL) { return (pkg_create_matches(argc, argv, match, fmt, outdir, overwrite) == EPKG_OK ? EX_OK : EX_SOFTWARE); } else if (metadatadir != NULL) { return (pkg_create_staged(outdir, fmt, rootdir, metadatadir, plist, hash) == EPKG_OK ? EX_OK : EX_SOFTWARE); } else { /* (manifest != NULL) */ return (pkg_create_from_manifest(outdir, fmt, rootdir, manifest, plist) == EPKG_OK ? EX_OK : EX_SOFTWARE); } }
int do_create(int argc, char *argv[]) { char c; char *buf, *ptr, *instance_name; char *inaddr_any_name = NULL; int i, status, len, pcnt; const char *token_label = NULL; const char *filename = NULL; const char *certname = NULL; const char *username = NULL; const char *proxy_port = NULL; char *format = NULL; boolean_t quote_next; char address_port[MAX_ADRPORT_LEN + 1]; argc -= 1; argv += 1; /* * Many of these arguments are passed on to kssladm command * in the start method of the SMF instance created. So, we do only * the basic usage checks here and let kssladm check the validity * of the arguments. This is the reason we ignore optarg * for some of the cases below. */ while ((c = getopt(argc, argv, "vT:d:f:h:i:p:c:C:t:u:x:z:")) != -1) { switch (c) { case 'd': break; case 'c': break; case 'C': certname = optarg; break; case 'f': format = optarg; break; case 'h': break; case 'i': filename = optarg; break; case 'T': token_label = optarg; break; case 'p': break; case 't': break; case 'u': username = optarg; break; case 'x': proxy_port = optarg; break; case 'v': verbose = B_TRUE; break; case 'z': break; default: goto err; } } if (format == NULL || proxy_port == NULL) { goto err; } if (get_portnum(proxy_port, NULL) == 0) { (void) fprintf(stderr, gettext("Error: Invalid proxy port value %s\n"), proxy_port); goto err; } if (strcmp(format, "pkcs11") == 0) { if (token_label == NULL || certname == NULL) { goto err; } } else if (strcmp(format, "pkcs12") == 0 || strcmp(format, "pem") == 0) { if (filename == NULL) { goto err; } } else { goto err; } pcnt = argc - optind; if (pcnt == 1) { if (strlen(argv[optind]) < MAX_ADRPORT_LEN) { (void) strcpy(address_port, argv[optind]); } else { (void) fprintf(stderr, gettext( "argument too long -- %s\n"), argv[optind]); return (FAILURE); } } else if (pcnt == 2) { if ((len = strlen(argv[optind])) + (strlen(argv[optind + 1])) < MAX_ADRPORT_LEN) { (void) strcpy(address_port, argv[optind]); address_port[len] = ' '; (void) strcpy(address_port + len + 1, argv[optind + 1]); } else { (void) fprintf(stderr, gettext( "arguments too long -- %s %s\n"), argv[optind], argv[optind + 1]); return (FAILURE); } } else { goto err; } /* * We need to create the kssladm command line in * the SMF instance from the current arguments. * * Construct a buffer with all the arguments except * the -u argument. We have to quote the string arguments, * -T and -C, as they can contain white space. */ len = 0; for (i = 1; i < optind; i++) { len += strlen(argv[i]) + 3; } if ((buf = malloc(len)) == NULL) { return (FAILURE); } ptr = buf; quote_next = B_FALSE; for (i = 1; i < optind; i++) { int arglen = strlen(argv[i]) + 1; if (strncmp(argv[i], "-u", 2) == 0) { i++; continue; } if (quote_next) { (void) snprintf(ptr, len, "\"%s\" ", argv[i]); quote_next = B_FALSE; arglen += 2; } else { (void) snprintf(ptr, len, "%s ", argv[i]); } quote_next = (strncmp(argv[i], "-T", 2) == 0 || strncmp(argv[i], "-C", 2) == 0); ptr += arglen; len -= arglen; } KSSL_DEBUG("buf=%s\n", buf); instance_name = create_instance_name(address_port, &inaddr_any_name, B_TRUE); if (instance_name == NULL || inaddr_any_name == NULL) { free(buf); return (FAILURE); } KSSL_DEBUG("instance_name=%s\n", instance_name); KSSL_DEBUG("inaddr_any_name=%s\n", inaddr_any_name); if (username == NULL) username = "******"; status = create_service(instance_name, address_port, buf, username, inaddr_any_name); if (status == INSTANCE_OTHER_EXISTS || status == INSTANCE_ANY_EXISTS) { if (status == INSTANCE_ANY_EXISTS && (strcmp(instance_name, inaddr_any_name) != SUCCESS)) { /* * The following could result in a misconfiguration. * Better bail out with an error. */ (void) fprintf(stderr, gettext("Error: INADDR_ANY instance exists." " Can not create a new instance %s.\n"), instance_name); free(instance_name); free(inaddr_any_name); free(buf); return (status); } /* * Delete the existing instance and create a new instance * with the supplied arguments. */ KSSL_DEBUG("Deleting duplicate instance\n"); if (delete_instance(instance_name) != SUCCESS) { (void) fprintf(stderr, gettext( "Error: Can not delete existing instance %s.\n"), instance_name); } else { (void) fprintf(stdout, gettext( "Note: reconfiguring the existing instance %s.\n"), instance_name); status = create_service(instance_name, address_port, buf, username, inaddr_any_name); } } free(instance_name); free(inaddr_any_name); free(buf); return (status); err: usage_create(B_TRUE); return (ERROR_USAGE); }
int exec_create(int argc, char **argv) { match_t match = MATCH_EXACT; const char *outdir = NULL; const char *format = NULL; const char *rootdir = NULL; const char *manifestdir = NULL; pkg_formats fmt; int ch; while ((ch = getopt(argc, argv, "agxXf:r:m:o:")) != -1) { switch (ch) { case 'a': match = MATCH_ALL; break; case 'g': match = MATCH_GLOB; break; case 'x': match = MATCH_REGEX; break; case 'X': match = MATCH_EREGEX; break; case 'f': format = optarg; break; case 'o': outdir = optarg; break; case 'r': rootdir = optarg; break; case 'm': manifestdir = optarg; break; } } argc -= optind; argv += optind; if (match != MATCH_ALL && argc == 0) { usage_create(); return (EX_USAGE); } if (outdir == NULL) outdir = "./"; if (format == NULL) { fmt = TXZ; } else { if (strcmp(format, "txz") == 0) fmt = TXZ; else if (strcmp(format, "tbz") == 0) fmt = TBZ; else if (strcmp(format, "tgz") == 0) fmt = TGZ; else if (strcmp(format, "tar") == 0) fmt = TAR; else { warnx("unknown format %s, using txz", format); fmt = TXZ; } } if (manifestdir == NULL) return pkg_create_matches(argc, argv, match, fmt, outdir, rootdir); else return pkg_create_fakeroot(outdir, fmt, rootdir, manifestdir); }
int exec_create(int argc, char **argv) { match_t match = MATCH_EXACT; const char *outdir = NULL; const char *format = NULL; const char *rootdir = NULL; const char *metadatadir = NULL; const char *manifest = NULL; char *plist = NULL; pkg_formats fmt; int ch; bool overwrite = true; struct option longopts[] = { { "all", no_argument, NULL, 'a' }, { "glob", no_argument, NULL, 'g' }, { "regex", no_argument, NULL, 'x' }, { "format", required_argument, NULL, 'f' }, { "root-dir", required_argument, NULL, 'r' }, { "metadata", required_argument, NULL, 'm' }, { "manifest", required_argument, NULL, 'M' }, { "out-dir", required_argument, NULL, 'o' }, { "no-clobber", no_argument, NULL, 'n' }, { "plist", required_argument, NULL, 'p' }, { NULL, 0, NULL, 0 }, }; while ((ch = getopt_long(argc, argv, "+agxf:r:m:M:o:np:", longopts, NULL)) != -1) { switch (ch) { case 'a': match = MATCH_ALL; break; case 'g': match = MATCH_GLOB; break; case 'x': match = MATCH_REGEX; break; case 'f': format = optarg; break; case 'o': outdir = optarg; break; case 'r': rootdir = optarg; break; case 'm': metadatadir = optarg; break; case 'M': manifest = optarg; break; case 'n': overwrite = false; break; case 'p': plist = optarg; break; default: usage_create(); return (EX_USAGE); } } argc -= optind; argv += optind; if (match != MATCH_ALL && metadatadir == NULL && manifest == NULL && argc == 0) { usage_create(); return (EX_USAGE); } if (metadatadir == NULL && manifest == NULL && rootdir != NULL) { warnx("Do not specify a rootdir when creating a package from an installed package"); usage_create(); return (EX_USAGE); } if (outdir == NULL) outdir = "./"; if (format == NULL) { fmt = TXZ; } else { if (format[0] == '.') ++format; if (strcmp(format, "txz") == 0) fmt = TXZ; else if (strcmp(format, "tbz") == 0) fmt = TBZ; else if (strcmp(format, "tgz") == 0) fmt = TGZ; else if (strcmp(format, "tar") == 0) fmt = TAR; else { warnx("unknown format %s, using txz", format); fmt = TXZ; } } if (metadatadir == NULL && manifest == NULL) { return (pkg_create_matches(argc, argv, match, fmt, outdir, overwrite) == EPKG_OK ? EX_OK : EX_SOFTWARE); } else if (metadatadir != NULL) { return (pkg_create_staged(outdir, fmt, rootdir, metadatadir, plist) == EPKG_OK ? EX_OK : EX_SOFTWARE); } else { /* (manifest != NULL) */ return (pkg_create_from_manifest(outdir, fmt, rootdir, manifest) == EPKG_OK ? EX_OK : EX_SOFTWARE); } }