summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Schneider <asn@samba.org>2014-12-18 15:13:27 +0000
committerGünther Deschner <gd@samba.org>2015-02-18 10:14:09 +0100
commit6595ced146a53dcef9bbd5d2deb82a44c8ce1a1a (patch)
tree1dcd6019028edc2c3fb74641920bacf7ac542429
parent38dbd054dc331a441b10fdebbdb4bd0fc51cfc0a (diff)
downloadsamba-6595ced146a53dcef9bbd5d2deb82a44c8ce1a1a.tar.gz
samba-6595ced146a53dcef9bbd5d2deb82a44c8ce1a1a.tar.xz
samba-6595ced146a53dcef9bbd5d2deb82a44c8ce1a1a.zip
printing: rework nt_printer_guid_store to return errors
Callers can now choose whether or not to ignore errors. BUG: https://bugzilla.samba.org/show_bug.cgi?id=11018 Pair-programmed-with: David Disseldorp <ddiss@samba.org> Signed-off-by: Andreas Schneider <asn@samba.org> Signed-off-by: David Disseldorp <ddiss@samba.org> Reviewed-by: Guenther Deschner <gd@samba.org>
-rw-r--r--source3/include/nt_printing.h3
-rw-r--r--source3/printing/nt_printing_ads.c49
2 files changed, 35 insertions, 17 deletions
diff --git a/source3/include/nt_printing.h b/source3/include/nt_printing.h
index 3d74b655c4..bfb6f8e22c 100644
--- a/source3/include/nt_printing.h
+++ b/source3/include/nt_printing.h
@@ -135,6 +135,9 @@ WERROR print_access_check(const struct auth_session_info *server_info,
WERROR nt_printer_guid_retrieve(TALLOC_CTX *mem_ctx, const char *printer,
struct GUID *pguid);
+WERROR nt_printer_guid_store(struct messaging_context *msg_ctx,
+ const char *printer, struct GUID guid);
+
WERROR nt_printer_guid_get(TALLOC_CTX *mem_ctx,
const struct auth_session_info *session_info,
struct messaging_context *msg_ctx,
diff --git a/source3/printing/nt_printing_ads.c b/source3/printing/nt_printing_ads.c
index 6f14e2d400..679b95031c 100644
--- a/source3/printing/nt_printing_ads.c
+++ b/source3/printing/nt_printing_ads.c
@@ -35,32 +35,32 @@
/*****************************************************************
****************************************************************/
-static void store_printer_guid(struct messaging_context *msg_ctx,
- const char *printer, struct GUID guid)
+WERROR nt_printer_guid_store(struct messaging_context *msg_ctx,
+ const char *printer, struct GUID guid)
{
TALLOC_CTX *tmp_ctx;
- struct auth_session_info *session_info = NULL;
+ const struct auth_session_info *session_info;
const char *guid_str;
DATA_BLOB blob;
- NTSTATUS status;
WERROR result;
tmp_ctx = talloc_new(NULL);
if (!tmp_ctx) {
- DEBUG(0, ("store_printer_guid: Out of memory?!\n"));
- return;
+ DEBUG(0, ("Out of memory?!\n"));
+ return WERR_NOMEM;
}
- status = make_session_info_system(tmp_ctx, &session_info);
- if (!NT_STATUS_IS_OK(status)) {
- DEBUG(0, ("store_printer_guid: "
- "Could not create system session_info\n"));
+ session_info = get_session_info_system();
+ if (session_info == NULL) {
+ DEBUG(0, ("Could not get system session_info\n"));
+ result = WERR_NOMEM;
goto done;
}
guid_str = GUID_string(tmp_ctx, &guid);
if (!guid_str) {
- DEBUG(0, ("store_printer_guid: Out of memory?!\n"));
+ DEBUG(0, ("Out of memory?!\n"));
+ result = WERR_NOMEM;
goto done;
}
@@ -68,9 +68,9 @@ static void store_printer_guid(struct messaging_context *msg_ctx,
Vista to whine */
if (!push_reg_sz(tmp_ctx, &blob, guid_str)) {
- DEBUG(0, ("store_printer_guid: "
- "Could not marshall string %s for objectGUID\n",
+ DEBUG(0, ("Could not marshall string %s for objectGUID\n",
guid_str));
+ result = WERR_NOMEM;
goto done;
}
@@ -79,12 +79,15 @@ static void store_printer_guid(struct messaging_context *msg_ctx,
SPOOL_DSSPOOLER_KEY, "objectGUID",
REG_SZ, blob.data, blob.length);
if (!W_ERROR_IS_OK(result)) {
- DEBUG(0, ("store_printer_guid: "
- "Failed to store GUID for printer %s\n", printer));
+ DEBUG(0, ("Failed to store GUID for printer %s\n", printer));
+ goto done;
}
+ result = WERR_OK;
done:
talloc_free(tmp_ctx);
+
+ return result;
}
static WERROR nt_printer_dn_lookup(TALLOC_CTX *mem_ctx,
@@ -468,6 +471,7 @@ static WERROR nt_printer_publish_ads(struct messaging_context *msg_ctx,
if (!ADS_ERR_OK(ads_rc)) {
DEBUG(3, ("error publishing %s: %s\n",
printer, ads_errstr(ads_rc)));
+ /* XXX failed to publish, so no guid to retrieve */
}
win_rc = nt_printer_guid_retrieve_internal(ads, printer_dn, &guid);
@@ -476,8 +480,13 @@ static WERROR nt_printer_publish_ads(struct messaging_context *msg_ctx,
return win_rc;
}
- /* TODO add a return value */
- store_printer_guid(msg_ctx, printer, guid);
+ win_rc = nt_printer_guid_store(msg_ctx, printer, guid);
+ if (!W_ERROR_IS_OK(win_rc)) {
+ DEBUG(3, ("failed to store printer %s guid\n",
+ printer));
+ /* not catastrophic, retrieve on next use */
+ win_rc = WERR_OK;
+ }
TALLOC_FREE(ctx);
@@ -717,6 +726,12 @@ bool is_printer_published(TALLOC_CTX *mem_ctx,
return true;
}
#else
+WERROR nt_printer_guid_store(struct messaging_context *msg_ctx,
+ const char *printer, struct GUID guid)
+{
+ return WERR_NOT_SUPPORTED;
+}
+
WERROR nt_printer_guid_retrieve(TALLOC_CTX *mem_ctx, const char *printer,
struct GUID *pguid)
{