werr = smbconf_get_config(conf_ctx, mem_ctx, &num_shares, &shares);
if (!W_ERROR_IS_OK(werr)) {
d_fprintf(stderr, "Error getting config: %s\n",
- dos_errstr(werr));
+ win_errstr(werr));
goto done;
}
net_conf_import_usage(c, argc, argv);
goto done;
case 2:
- servicename = talloc_strdup_lower(mem_ctx, argv[1]);
+ servicename = talloc_strdup(mem_ctx, argv[1]);
if (servicename == NULL) {
d_printf("error: out of memory!\n");
goto done;
werr = smbconf_init(mem_ctx, &txt_ctx, conf_source);
if (!W_ERROR_IS_OK(werr)) {
d_printf("error loading file '%s': %s\n", filename,
- dos_errstr(werr));
+ win_errstr(werr));
goto done;
}
servicename,
&service);
if (!W_ERROR_IS_OK(werr)) {
- goto done;
+ goto cancel;
}
werr = import_process_service(c, conf_ctx, service);
if (!W_ERROR_IS_OK(werr)) {
- goto done;
+ goto cancel;
}
} else {
struct smbconf_service **services = NULL;
&num_shares,
&services);
if (!W_ERROR_IS_OK(werr)) {
- goto done;
+ goto cancel;
}
if (!c->opt_testmode) {
werr = smbconf_drop(conf_ctx);
if (!W_ERROR_IS_OK(werr)) {
- goto done;
+ goto cancel;
}
}
+
+ /*
+ * Wrap the importing of shares into a transaction,
+ * but only 100 at a time, in order to serve memory.
+ * The allocated memory accumulates across the actions
+ * within the transaction, and for me, some 1500
+ * imported shares, the MAX_TALLOC_SIZE of 256 MB
+ * was exceeded.
+ */
+ werr = smbconf_transaction_start(conf_ctx);
+ if (!W_ERROR_IS_OK(werr)) {
+ d_printf("error starting transaction: %s\n",
+ win_errstr(werr));
+ goto done;
+ }
+
for (sidx = 0; sidx < num_shares; sidx++) {
werr = import_process_service(c, conf_ctx,
services[sidx]);
if (!W_ERROR_IS_OK(werr)) {
+ goto cancel;
+ }
+
+ if (sidx % 100) {
+ continue;
+ }
+
+ werr = smbconf_transaction_commit(conf_ctx);
+ if (!W_ERROR_IS_OK(werr)) {
+ d_printf("error committing transaction: %s\n",
+ win_errstr(werr));
+ goto done;
+ }
+ werr = smbconf_transaction_start(conf_ctx);
+ if (!W_ERROR_IS_OK(werr)) {
+ d_printf("error starting transaction: %s\n",
+ win_errstr(werr));
goto done;
}
}
}
- ret = 0;
+ werr = smbconf_transaction_commit(conf_ctx);
+ if (!W_ERROR_IS_OK(werr)) {
+ d_printf("error committing transaction: %s\n",
+ win_errstr(werr));
+ } else {
+ ret = 0;
+ }
+
+ goto done;
+
+cancel:
+ werr = smbconf_transaction_cancel(conf_ctx);
+ if (!W_ERROR_IS_OK(werr)) {
+ d_printf("error cancelling transaction: %s\n",
+ win_errstr(werr));
+ }
done:
TALLOC_FREE(mem_ctx);
werr = smbconf_drop(conf_ctx);
if (!W_ERROR_IS_OK(werr)) {
d_fprintf(stderr, "Error deleting configuration: %s\n",
- dos_errstr(werr));
+ win_errstr(werr));
goto done;
}
goto done;
}
- sharename = talloc_strdup_lower(mem_ctx, argv[0]);
+ sharename = talloc_strdup(mem_ctx, argv[0]);
if (sharename == NULL) {
d_printf("error: out of memory!\n");
goto done;
werr = smbconf_get_share(conf_ctx, mem_ctx, sharename, &service);
if (!W_ERROR_IS_OK(werr)) {
d_printf("error getting share parameters: %s\n",
- dos_errstr(werr));
+ win_errstr(werr));
goto done;
}
- d_printf("[%s]\n", sharename);
+ d_printf("[%s]\n", service->name);
for (count = 0; count < service->num_params; count++) {
d_printf("\t%s = %s\n", service->param_names[count],
}
case 2:
path = argv[1];
- sharename = talloc_strdup_lower(mem_ctx, argv[0]);
+ sharename = talloc_strdup(mem_ctx, argv[0]);
if (sharename == NULL) {
d_printf("error: out of memory!\n");
goto done;
goto done;
}
- if (getpwnam(sharename)) {
- d_fprintf(stderr, "ERROR: share name %s is already a valid "
- "system user name.\n", sharename);
- goto done;
- }
-
if (strequal(sharename, GLOBAL_NAME)) {
d_fprintf(stderr,
"ERROR: 'global' is not a valid share name.\n");
werr = smbconf_create_share(conf_ctx, sharename);
if (!W_ERROR_IS_OK(werr)) {
d_fprintf(stderr, "Error creating share %s: %s\n",
- sharename, dos_errstr(werr));
+ sharename, win_errstr(werr));
goto done;
}
werr = smbconf_set_parameter(conf_ctx, sharename, "path", path);
if (!W_ERROR_IS_OK(werr)) {
d_fprintf(stderr, "Error setting parameter %s: %s\n",
- "path", dos_errstr(werr));
+ "path", win_errstr(werr));
goto done;
}
comment);
if (!W_ERROR_IS_OK(werr)) {
d_fprintf(stderr, "Error setting parameter %s: %s\n",
- "comment", dos_errstr(werr));
+ "comment", win_errstr(werr));
goto done;
}
}
werr = smbconf_set_parameter(conf_ctx, sharename, "guest ok", guest_ok);
if (!W_ERROR_IS_OK(werr)) {
d_fprintf(stderr, "Error setting parameter %s: %s\n",
- "'guest ok'", dos_errstr(werr));
+ "'guest ok'", win_errstr(werr));
goto done;
}
writeable);
if (!W_ERROR_IS_OK(werr)) {
d_fprintf(stderr, "Error setting parameter %s: %s\n",
- "writeable", dos_errstr(werr));
+ "writeable", win_errstr(werr));
goto done;
}
net_conf_delshare_usage(c, argc, argv);
goto done;
}
- sharename = talloc_strdup_lower(mem_ctx, argv[0]);
+ sharename = talloc_strdup(mem_ctx, argv[0]);
if (sharename == NULL) {
d_printf("error: out of memory!\n");
goto done;
werr = smbconf_delete_share(conf_ctx, sharename);
if (!W_ERROR_IS_OK(werr)) {
d_fprintf(stderr, "Error deleting share %s: %s\n",
- sharename, dos_errstr(werr));
+ sharename, win_errstr(werr));
goto done;
}
net_conf_setparm_usage(c, argc, argv);
goto done;
}
- service = talloc_strdup_lower(mem_ctx, argv[0]);
+ service = talloc_strdup(mem_ctx, argv[0]);
if (service == NULL) {
d_printf("error: out of memory!\n");
goto done;
werr = smbconf_create_share(conf_ctx, service);
if (!W_ERROR_IS_OK(werr)) {
d_fprintf(stderr, "Error creating share '%s': %s\n",
- service, dos_errstr(werr));
+ service, win_errstr(werr));
goto done;
}
}
if (!W_ERROR_IS_OK(werr)) {
d_fprintf(stderr, "Error setting value '%s': %s\n",
- param, dos_errstr(werr));
+ param, win_errstr(werr));
goto done;
}
net_conf_getparm_usage(c, argc, argv);
goto done;
}
- service = talloc_strdup_lower(mem_ctx, argv[0]);
+ service = talloc_strdup(mem_ctx, argv[0]);
if (service == NULL) {
d_printf("error: out of memory!\n");
goto done;
goto done;
} else if (!W_ERROR_IS_OK(werr)) {
d_fprintf(stderr, "Error getting value '%s': %s.\n",
- param, dos_errstr(werr));
+ param, win_errstr(werr));
goto done;
}
net_conf_delparm_usage(c, argc, argv);
goto done;
}
- service = talloc_strdup_lower(mem_ctx, argv[0]);
+ service = talloc_strdup(mem_ctx, argv[0]);
if (service == NULL) {
d_printf("error: out of memory!\n");
goto done;
goto done;
} else if (!W_ERROR_IS_OK(werr)) {
d_fprintf(stderr, "Error deleting value '%s': %s.\n",
- param, dos_errstr(werr));
+ param, win_errstr(werr));
goto done;
}
goto done;
}
- service = talloc_strdup_lower(mem_ctx, argv[0]);
+ service = talloc_strdup(mem_ctx, argv[0]);
if (service == NULL) {
d_printf("error: out of memory!\n");
goto done;
werr = smbconf_get_includes(conf_ctx, mem_ctx, service,
&num_includes, &includes);
if (!W_ERROR_IS_OK(werr)) {
- d_printf("error getting includes: %s\n", dos_errstr(werr));
+ d_printf("error getting includes: %s\n", win_errstr(werr));
goto done;
}
goto done;
}
- service = talloc_strdup_lower(mem_ctx, argv[0]);
+ service = talloc_strdup(mem_ctx, argv[0]);
if (service == NULL) {
d_printf("error: out of memory!\n");
goto done;
werr = smbconf_set_includes(conf_ctx, service, num_includes, includes);
if (!W_ERROR_IS_OK(werr)) {
- d_printf("error setting includes: %s\n", dos_errstr(werr));
+ d_printf("error setting includes: %s\n", win_errstr(werr));
goto done;
}
goto done;
}
- service = talloc_strdup_lower(mem_ctx, argv[0]);
+ service = talloc_strdup(mem_ctx, argv[0]);
if (service == NULL) {
d_printf("error: out of memory!\n");
goto done;
werr = smbconf_delete_includes(conf_ctx, service);
if (!W_ERROR_IS_OK(werr)) {
- d_printf("error deleting includes: %s\n", dos_errstr(werr));
+ d_printf("error deleting includes: %s\n", win_errstr(werr));
goto done;
}