diff options
Diffstat (limited to 'source3/client/smbspool.c')
-rw-r--r-- | source3/client/smbspool.c | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/source3/client/smbspool.c b/source3/client/smbspool.c index 5a78fe14fc..ce920d1a58 100644 --- a/source3/client/smbspool.c +++ b/source3/client/smbspool.c @@ -115,7 +115,7 @@ static int smb_print(struct cli_state *, char *, FILE *); copies = atoi(argv[4]); /* - * Fine the URI... + * Find the URI... */ if (strncmp(argv[0], "smb://", 6) == 0) @@ -205,11 +205,33 @@ static int smb_print(struct cli_state *, char *, FILE *); load_interfaces(); - if ((cli = smb_connect(workgroup, server, printer, username, password)) == NULL) + do { - perror("ERROR: Unable to connect to SAMBA host"); - return (1); + if ((cli = smb_connect(workgroup, server, printer, username, password)) == NULL) + { + if (getenv("CLASS") == NULL) + { + perror("ERROR: Unable to connect to SAMBA host, will retry in 60 seconds..."); + sleep (60); + } + else + { + perror("ERROR: Unable to connect to SAMBA host, trying next printer..."); + return (1); + } + } } + while (cli == NULL); + + /* + * Now that we are connected to the server, ignore SIGTERM so that we + * can finish out any page data the driver sends (e.g. to eject the + * current page... Only ignore SIGTERM if we are printing data from + * stdin (otherwise you can't cancel raw jobs...) + */ + + if (argc < 7) + CatchSignal(SIGTERM, SIG_IGN); /* * Queue the job... |