diff options
author | Jim McDonough <jmcd@samba.org> | 2004-11-14 03:12:46 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 10:53:16 -0500 |
commit | 3e8e24c629a5520318029f737cc06421ee656cd7 (patch) | |
tree | 82b5a2f89cd7f42518f2475b8cb5d1b9fe4c5ae8 /source3/printing | |
parent | 1b31f46f22831781b9ec5592da189a5210cfbc45 (diff) | |
download | samba-3e8e24c629a5520318029f737cc06421ee656cd7.tar.gz samba-3e8e24c629a5520318029f737cc06421ee656cd7.tar.bz2 samba-3e8e24c629a5520318029f737cc06421ee656cd7.zip |
r3727: Update from Rob Foehl (rwf@loonybin.net):
Try modifying printer before adding it,since add logic appends ObjectClass to mods, which caused a contraint violation when modifying an already published printer.
Also cleanup the check_published_printers() logic when verifying published status on startup.
(This used to be commit 82eb168c827b4b7310b42c0f36c504e0fa16dc99)
Diffstat (limited to 'source3/printing')
-rw-r--r-- | source3/printing/nt_printing.c | 34 |
1 files changed, 10 insertions, 24 deletions
diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c index 6ab8b76f14..2dc565c79c 100644 --- a/source3/printing/nt_printing.c +++ b/source3/printing/nt_printing.c @@ -2707,9 +2707,12 @@ static WERROR nt_printer_publish_ads(ADS_STRUCT *ads, printer->info_2->sharename); /* publish it */ - ads_rc = ads_add_printer_entry(ads, prt_dn, ctx, &mods); - if (LDAP_ALREADY_EXISTS == ads_rc.err.rc) - ads_rc = ads_mod_printer_entry(ads, prt_dn, ctx, &mods); + ads_rc = ads_mod_printer_entry(ads, prt_dn, ctx, &mods); + if (ads_rc.err.rc == LDAP_NO_SUCH_OBJECT) + ads_rc = ads_add_printer_entry(ads, prt_dn, ctx, &mods); + + if (!ADS_ERR_OK(ads_rc)) + DEBUG(3, ("error publishing %s: %s\n", printer->info_2->sharename, ads_errstr(ads_rc))); talloc_destroy(ctx); @@ -2831,11 +2834,9 @@ WERROR check_published_printers(void) { ADS_STATUS ads_rc; ADS_STRUCT *ads = NULL; - void *res = NULL; int snum; int n_services = lp_numservices(); NT_PRINTER_INFO_LEVEL *printer = NULL; - WERROR win_rc; ads = ads_init(NULL, NULL, NULL); if (!ads) { @@ -2859,27 +2860,12 @@ WERROR check_published_printers(void) if (!(lp_snum_ok(snum) && lp_print_ok(snum))) continue; - if (!W_ERROR_IS_OK(get_a_printer(NULL, &printer, 2, - lp_servicename(snum))) || - !(printer->info_2->attributes & PRINTER_ATTRIBUTE_PUBLISHED)) - goto next; - - DEBUG(5, ("checking directory for printer %s\n", printer->info_2->printername)); - ads_rc = ads_find_printer_on_server(ads, &res, - printer->info_2->sharename, global_myname()); - if (ADS_ERR_OK(ads_rc) && ads_count_replies(ads, res)) { - DEBUG(5, ("printer %s is in directory\n", printer->info_2->printername)); - goto next; - } + if (W_ERROR_IS_OK(get_a_printer(NULL, &printer, 2, + lp_servicename(snum))) && + (printer->info_2->attributes & PRINTER_ATTRIBUTE_PUBLISHED)) + nt_printer_publish_ads(ads, printer); - win_rc = nt_printer_publish_ads(ads, printer); - if (!W_ERROR_IS_OK(win_rc)) - DEBUG(3, ("error publishing %s: %s\n", printer->info_2->sharename, dos_errstr(win_rc))); - - next: free_a_printer(&printer, 2); - ads_msgfree(ads, res); - res = NULL; } ads_destroy(&ads); |