From 57f76d122150b80314faabccc63902a8bf8ef605 Mon Sep 17 00:00:00 2001 From: fredrik Date: Sat, 27 May 2006 01:56:03 +0000 Subject: [PATCH 01/16] Check for keyutils. git-svn-id: svn+ssh://svn.dolda2000.com/srv/svn/repos/src/doldaconnect@612 959494ce-11ee-0310-bf91-de5d638817bd --- configure.in | 3 +++ 1 file changed, 3 insertions(+) diff --git a/configure.in b/configure.in index 2af68d7..b4c2c60 100644 --- a/configure.in +++ b/configure.in @@ -144,6 +144,9 @@ AC_CHECK_MEMBER(struct sockaddr_in6.sin6_family, [ AC_DEFINE(HAVE_IPV6) ], , [#i AH_TEMPLATE(HAVE_RESOLVER, [define if your system supports the res_* functions to fetch DNS RRs]) AC_CHECK_LIB(resolv, res_query, [ AC_DEFINE(HAVE_RESOLVER) LDFLAGS="$LDFLAGS -lresolv" ]) +AH_TEMPLATE(HAVE_KEYUTILS, [define if your system supports the Linux keyring functions]) +AC_CHECK_LIB(keyutils, keyctl_search, [ AC_DEFINE(HAVE_KEYUTILS) + LDFLAGS="$LDFLAGS -lkeyutils" ]) AC_HEADER_STDC AC_HEADER_DIRENT -- 2.11.0 From 5feb6be7188c594f4d2b9685db7f3fb0b584ea4a Mon Sep 17 00:00:00 2001 From: fredrik Date: Sat, 27 May 2006 01:56:26 +0000 Subject: [PATCH 02/16] Create a new session keyring with keyutils. git-svn-id: svn+ssh://svn.dolda2000.com/srv/svn/repos/src/doldaconnect@613 959494ce-11ee-0310-bf91-de5d638817bd --- daemon/main.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/daemon/main.c b/daemon/main.c index 025c5a2..2c6f08d 100644 --- a/daemon/main.c +++ b/daemon/main.c @@ -43,6 +43,10 @@ #include "sysevents.h" #include "auth.h" +#ifdef HAVE_KEYUTILS +#include +#endif + struct module *modchain = NULL; static struct timer *timers = NULL; static struct child *children = NULL; @@ -303,6 +307,9 @@ pid_t forksess(uid_t user, struct authhandle *auth, void (*ccbfunc)(pid_t, int, setpgrp(); signal(SIGHUP, SIG_IGN); errno = 0; +#ifdef HAVE_KEYUTILS + keyctl_join_session_keyring(NULL); +#endif if((authopensess(auth)) != AUTH_SUCCESS) { flog(LOG_WARNING, "could not open session for user %s: %s", pwent->pw_name, (errno == 0)?"Unknown error - should be logged above":strerror(errno)); -- 2.11.0 From 56838143070d2b886c18eb86be7eeae896b9c92a Mon Sep 17 00:00:00 2001 From: fredrik Date: Sat, 27 May 2006 02:11:14 +0000 Subject: [PATCH 03/16] Allow using the default ccache. git-svn-id: svn+ssh://svn.dolda2000.com/srv/svn/repos/src/doldaconnect@614 959494ce-11ee-0310-bf91-de5d638817bd --- daemon/auth-krb5.c | 91 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 58 insertions(+), 33 deletions(-) diff --git a/daemon/auth-krb5.c b/daemon/auth-krb5.c index 62827c6..07b9cda 100644 --- a/daemon/auth-krb5.c +++ b/daemon/auth-krb5.c @@ -420,43 +420,67 @@ static int opensess(struct authhandle *auth) flog(LOG_ERR, "could not get passwd entry for forwarded tickets (user %s): %s", data->username, strerror(errno)); return(AUTH_ERR); } - buf = sprintf2("/tmp/krb5cc_dc_%i_XXXXXX", pwent->pw_uid); - if((fd = mkstemp(buf)) < 0) + if(confgetint("auth-krb5", "usedefcc")) { - free(buf); - flog(LOG_ERR, "could not create temporary file for ccache: %s", strerror(errno)); - return(AUTH_ERR); - } - close(fd); - buf2 = sprintf2("FILE:%s", buf); - if((ret = krb5_cc_resolve(k5context, buf2, &data->ccache)) != 0) - { - free(buf); + buf = sprintf2("/tmp/krb5cc_dc_%i_XXXXXX", pwent->pw_uid); + if((fd = mkstemp(buf)) < 0) + { + free(buf); + flog(LOG_ERR, "could not create temporary file for ccache: %s", strerror(errno)); + return(AUTH_ERR); + } + close(fd); + buf2 = sprintf2("FILE:%s", buf); + if((ret = krb5_cc_resolve(k5context, buf2, &data->ccache)) != 0) + { + free(buf); + free(buf2); + flog(LOG_ERR, "could not resolve ccache name \"%s\": %s", buf2, error_message(ret)); + return(AUTH_ERR); + } + setenv("KRB5CCNAME", buf2, 1); free(buf2); - flog(LOG_ERR, "could not resolve ccache name \"%s\": %s", buf2, error_message(ret)); - return(AUTH_ERR); - } - setenv("KRB5CCNAME", buf2, 1); - free(buf2); - if((ret = krb5_cc_initialize(k5context, data->ccache, data->ticket->enc_part2->client)) != 0) - { - free(buf); - flog(LOG_ERR, "could not initialize ccache: %s", error_message(ret)); - return(AUTH_ERR); - } - if((ret = krb5_cc_store_cred(k5context, data->ccache, data->creds)) != 0) - { - free(buf); - flog(LOG_ERR, "could not store forwarded TGT into ccache: %s", error_message(ret)); - return(AUTH_ERR); - } - if(chown(buf, pwent->pw_uid, pwent->pw_gid)) - { + if((ret = krb5_cc_initialize(k5context, data->ccache, data->ticket->enc_part2->client)) != 0) + { + free(buf); + flog(LOG_ERR, "could not initialize ccache: %s", error_message(ret)); + return(AUTH_ERR); + } + if((ret = krb5_cc_store_cred(k5context, data->ccache, data->creds)) != 0) + { + free(buf); + flog(LOG_ERR, "could not store forwarded TGT into ccache: %s", error_message(ret)); + return(AUTH_ERR); + } + if(chown(buf, pwent->pw_uid, pwent->pw_gid)) + { + free(buf); + flog(LOG_ERR, "could not chown new ccache to %i:%i: %s", pwent->pw_uid, pwent->pw_gid, strerror(errno)); + return(AUTH_ERR); + } free(buf); - flog(LOG_ERR, "could not chown new ccache to %i:%i: %s", pwent->pw_uid, pwent->pw_gid, strerror(errno)); - return(AUTH_ERR); + } else { + if((buf = krb5_cc_default_name(k5context)) == NULL) { + flog(LOG_ERR, "could not get default ccache name"); + return(AUTH_ERR); + } + if((ret = krb5_cc_resolve(k5context, buf, &data->ccache)) != 0) + { + flog(LOG_ERR, "could not resolve ccache name \"%s\": %s", buf2, error_message(ret)); + return(AUTH_ERR); + } + setenv("KRB5CCNAME", buf, 1); + if((ret = krb5_cc_initialize(k5context, data->ccache, data->ticket->enc_part2->client)) != 0) + { + flog(LOG_ERR, "could not initialize ccache: %s", error_message(ret)); + return(AUTH_ERR); + } + if((ret = krb5_cc_store_cred(k5context, data->ccache, data->creds)) != 0) + { + flog(LOG_ERR, "could not store forwarded TGT into ccache: %s", error_message(ret)); + return(AUTH_ERR); + } } - free(buf); } return(AUTH_SUCCESS); } @@ -571,6 +595,7 @@ static struct configvar myvars[] = {CONF_VAR_STRING, "service", {.str = L"doldacond"}}, {CONF_VAR_STRING, "keytab", {.str = L""}}, {CONF_VAR_BOOL, "renewcreds", {.num = 1}}, + {CONF_VAR_BOOL, "usedefcc", {.num = 0}}, {CONF_VAR_END} }; -- 2.11.0 From 4a68468fa6b9a86d0ad27b204dcdf3cb769c04a6 Mon Sep 17 00:00:00 2001 From: fredrik Date: Sun, 28 May 2006 04:00:38 +0000 Subject: [PATCH 04/16] chown the sessin keyring properly. git-svn-id: svn+ssh://svn.dolda2000.com/srv/svn/repos/src/doldaconnect@615 959494ce-11ee-0310-bf91-de5d638817bd --- daemon/main.c | 1 + 1 file changed, 1 insertion(+) diff --git a/daemon/main.c b/daemon/main.c index 2c6f08d..dddd8f1 100644 --- a/daemon/main.c +++ b/daemon/main.c @@ -309,6 +309,7 @@ pid_t forksess(uid_t user, struct authhandle *auth, void (*ccbfunc)(pid_t, int, errno = 0; #ifdef HAVE_KEYUTILS keyctl_join_session_keyring(NULL); + keyctl_chown(KEY_SPEC_SESSION_KEYRING, pwent->pw_uid, pwent->pw_gid); #endif if((authopensess(auth)) != AUTH_SUCCESS) { -- 2.11.0 From d2a3e34aad6590a6a228d367378c534ab3b89bca Mon Sep 17 00:00:00 2001 From: fredrik Date: Sun, 28 May 2006 04:01:18 +0000 Subject: [PATCH 05/16] Avoid warning. git-svn-id: svn+ssh://svn.dolda2000.com/srv/svn/repos/src/doldaconnect@616 959494ce-11ee-0310-bf91-de5d638817bd --- daemon/auth-krb5.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daemon/auth-krb5.c b/daemon/auth-krb5.c index 07b9cda..5409692 100644 --- a/daemon/auth-krb5.c +++ b/daemon/auth-krb5.c @@ -460,7 +460,7 @@ static int opensess(struct authhandle *auth) } free(buf); } else { - if((buf = krb5_cc_default_name(k5context)) == NULL) { + if((buf = (char *)krb5_cc_default_name(k5context)) == NULL) { flog(LOG_ERR, "could not get default ccache name"); return(AUTH_ERR); } -- 2.11.0 From 5b193db06069c0d85b1f90f2df23a7091edc8999 Mon Sep 17 00:00:00 2001 From: fredrik Date: Mon, 29 May 2006 19:17:17 +0000 Subject: [PATCH 06/16] Fixed potential buf in filterread. git-svn-id: svn+ssh://svn.dolda2000.com/srv/svn/repos/src/doldaconnect@617 959494ce-11ee-0310-bf91-de5d638817bd --- daemon/transfer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daemon/transfer.c b/daemon/transfer.c index ab862a2..0fea334 100644 --- a/daemon/transfer.c +++ b/daemon/transfer.c @@ -576,7 +576,7 @@ static void filterread(struct socket *sk, struct transfer *transfer) return; bufcat(transfer->filterbuf, buf, bufsize); free(buf); - if((p = memchr(transfer->filterbuf, '\n', transfer->filterbufdata)) != NULL) + while((p = memchr(transfer->filterbuf, '\n', transfer->filterbufdata)) != NULL) { *(p++) = 0; if((p2 = strchr(transfer->filterbuf, ' ')) != NULL) -- 2.11.0 From 13b303d46959819a2da9e7d783b751c9ade45da5 Mon Sep 17 00:00:00 2001 From: fredrik Date: Mon, 29 May 2006 19:18:55 +0000 Subject: [PATCH 07/16] Fixed logging bug in filterread. git-svn-id: svn+ssh://svn.dolda2000.com/srv/svn/repos/src/doldaconnect@618 959494ce-11ee-0310-bf91-de5d638817bd --- daemon/transfer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daemon/transfer.c b/daemon/transfer.c index 0fea334..1d4bd21 100644 --- a/daemon/transfer.c +++ b/daemon/transfer.c @@ -587,7 +587,7 @@ static void filterread(struct socket *sk, struct transfer *transfer) if(p2 != NULL) { if((arg = icmbstowcs(p2, NULL)) == NULL) - flog(LOG_WARNING, "filter sent a string which could not be converted into the local charset: %s: %s", transfer->filterbuf, strerror(errno)); + flog(LOG_WARNING, "filter sent a string which could not be converted into the local charset: %s: %s", p2, strerror(errno)); } CBCHAINDOCB(transfer, trans_filterout, transfer, cmd, arg); if(arg != NULL) -- 2.11.0 From 0309b83d648174d93dc52c11e8c8a243e0bd3e8b Mon Sep 17 00:00:00 2001 From: fredrik Date: Mon, 29 May 2006 19:25:46 +0000 Subject: [PATCH 08/16] Enable filter to pass an exit status. git-svn-id: svn+ssh://svn.dolda2000.com/srv/svn/repos/src/doldaconnect@619 959494ce-11ee-0310-bf91-de5d638817bd --- daemon/transfer.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/daemon/transfer.c b/daemon/transfer.c index 1d4bd21..066febc 100644 --- a/daemon/transfer.c +++ b/daemon/transfer.c @@ -80,6 +80,8 @@ void freetransfer(struct transfer *transfer) free(transfer->filterbuf); if(transfer->hash != NULL) freehash(transfer->hash); + if(transfer->exitstatus != NULL) + free(transfer->exitstatus); if(transfer->localend != NULL) { transfer->localend->readcb = NULL; @@ -566,6 +568,17 @@ static char *findfilter(struct passwd *pwd) return(NULL); } +static void handletranscmd(struct transfer *transfer, wchar_t *cmd, wchar_t *arg) +{ + if(!wcscmp(cmd, L"status")) { + if(arg == NULL) + arg = L""; + if(transfer->exitstatus != NULL) + free(transfer->exitstatus); + transfer->exitstatus = swcsdup(arg); + } +} + static void filterread(struct socket *sk, struct transfer *transfer) { char *buf, *p, *p2; @@ -589,6 +602,7 @@ static void filterread(struct socket *sk, struct transfer *transfer) if((arg = icmbstowcs(p2, NULL)) == NULL) flog(LOG_WARNING, "filter sent a string which could not be converted into the local charset: %s: %s", p2, strerror(errno)); } + handletranscmd(transfer, cmd, arg); CBCHAINDOCB(transfer, trans_filterout, transfer, cmd, arg); if(arg != NULL) free(arg); -- 2.11.0 From 70628d22a27223639e610c96608e4450ed477d6e Mon Sep 17 00:00:00 2001 From: fredrik Date: Mon, 29 May 2006 19:25:50 +0000 Subject: [PATCH 09/16] Enable filter to pass an exit status. git-svn-id: svn+ssh://svn.dolda2000.com/srv/svn/repos/src/doldaconnect@620 959494ce-11ee-0310-bf91-de5d638817bd --- daemon/transfer.h | 1 + 1 file changed, 1 insertion(+) diff --git a/daemon/transfer.h b/daemon/transfer.h index f67898f..5a5b022 100644 --- a/daemon/transfer.h +++ b/daemon/transfer.h @@ -84,6 +84,7 @@ struct transfer char *filterbuf; struct hash *hash; size_t filterbufsize, filterbufdata; + wchar_t *exitstatus; CBCHAIN(trans_ac, struct transfer *transfer, wchar_t *attrib); CBCHAIN(trans_p, struct transfer *transfer); CBCHAIN(trans_act, struct transfer *transfer); -- 2.11.0 From 3d204c2d865abab2812acfab4e00fa9b346d1369 Mon Sep 17 00:00:00 2001 From: fredrik Date: Mon, 29 May 2006 19:25:55 +0000 Subject: [PATCH 10/16] Enable filter to pass an exit status. git-svn-id: svn+ssh://svn.dolda2000.com/srv/svn/repos/src/doldaconnect@621 959494ce-11ee-0310-bf91-de5d638817bd --- daemon/ui.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/daemon/ui.c b/daemon/ui.c index fd5601f..d2bae9c 100644 --- a/daemon/ui.c +++ b/daemon/ui.c @@ -1924,7 +1924,7 @@ static int transferdestroyed(struct transfer *transfer, void *uudata) for(data = actives; data != NULL; data = data->next) { if(haspriv(data, PERM_TRANS) && data->notify.b.tract && ((transfer->owner == 0) || (transfer->owner == data->uid))) - newnotif(data, 617, NOTIF_ID, transfer->id, NOTIF_END); + newnotif(data, 617, NOTIF_ID, transfer->id, NOTIF_STR, (transfer->exitstatus == NULL)?L"":(transfer->exitstatus), NOTIF_END); } return(0); } -- 2.11.0 From b2abdf40216aa87e50f6a3785a2f74fc140c453f Mon Sep 17 00:00:00 2001 From: fredrik Date: Mon, 29 May 2006 19:26:28 +0000 Subject: [PATCH 11/16] Receive transfer exit status. git-svn-id: svn+ssh://svn.dolda2000.com/srv/svn/repos/src/doldaconnect@622 959494ce-11ee-0310-bf91-de5d638817bd --- lib/uicmds | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/uicmds b/lib/uicmds index 6bdf3c4..74ac5d7 100644 --- a/lib/uicmds +++ b/lib/uicmds @@ -124,7 +124,7 @@ 614 i i ; Transfer error update 615 i i ; Transfer progress 616 i s ; Transfer path change -617 i ; Transfer destroy +617 i s ; Transfer destroy 618 i s ; Transfer hash update 620 i i 621 i -- 2.11.0 From 23d33e0ed6b2365d1f2b9db37e3a93ab8717e446 Mon Sep 17 00:00:00 2001 From: fredrik Date: Mon, 29 May 2006 19:28:13 +0000 Subject: [PATCH 12/16] Ignore 602 (don't replace ID with name). git-svn-id: svn+ssh://svn.dolda2000.com/srv/svn/repos/src/doldaconnect@623 959494ce-11ee-0310-bf91-de5d638817bd --- lib/guile/chatlog | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/guile/chatlog b/lib/guile/chatlog index 4d0b630..e81e11b 100755 --- a/lib/guile/chatlog +++ b/lib/guile/chatlog @@ -123,13 +123,13 @@ (close-port p)) )) ) - ((602) - (let ((ires (dc-intresp resp))) - (if ires - (let ((ent (assoc (car ires) fnetnodes))) - (if ent - (set-cdr! ent (cadr ires)) - (set! fnetnodes (cons (cons (car ires) (cadr ires)) fnetnodes))))))) +; ((602) +; (let ((ires (dc-intresp resp))) +; (if ires +; (let ((ent (assoc (car ires) fnetnodes))) +; (if ent +; (set-cdr! ent (cadr ires)) +; (set! fnetnodes (cons (cons (car ires) (cadr ires)) fnetnodes))))))) ) ) -- 2.11.0 From aa82fda048bf105293e2bb39afc6bf337bb433de Mon Sep 17 00:00:00 2001 From: fredrik Date: Mon, 29 May 2006 19:46:22 +0000 Subject: [PATCH 13/16] Pass along exit status. git-svn-id: svn+ssh://svn.dolda2000.com/srv/svn/repos/src/doldaconnect@624 959494ce-11ee-0310-bf91-de5d638817bd --- lib/guile/autodl | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/guile/autodl b/lib/guile/autodl index 281c236..c8ce115 100755 --- a/lib/guile/autodl +++ b/lib/guile/autodl @@ -380,7 +380,7 @@ ) (define (autodl-main args) - (let ((dc-server #f) (done #f) (retval 0)) + (let ((dc-server #f) (done #f) (retval 0) (filterexit "")) (let ((getopt (make-getopt (cdr args) "whs:S:e:p:t:a:I:")) (arg #f)) (do ((arg (getopt) (getopt))) ((not (and (pair? arg) (char? (car arg)))) (set! args arg)) (cond ((eq? (car arg) #\h) @@ -409,6 +409,10 @@ (let ((c (assoc 'info-file session))) (if c (set-cdr! c (cdr arg)) (set! session (cons (cons 'info-file (cdr arg)) session))))) + ((eq? (car arg) #\E) + (let ((c (assoc 'estat-file session))) + (if c (set-cdr! c (cdr arg)) + (set! session (cons (cons 'estat-file (cdr arg)) session))))) ((eq? (car arg) #\e) (set! session (cons (cons 'sexpr (dc-lexsexpr (cdr arg))) session))) ((eq? (car arg) #\w) @@ -500,6 +504,7 @@ (begin (logf (string-append "transfer " (number->string (car ires)) " done")) (set! trans (assq-remove! trans (car ires))) (set! done #t) + (set! filterexit (cadr tr)) (throw 'sig 0)) (begin (logf (string-append "transfer " (number->string (car ires)) " disappeared")) (set! trans (assq-remove! trans (car ires))))))))) @@ -558,6 +563,11 @@ ))) (lambda (key sig) (logf "forcing quit"))) + (if (assoc 'estat-file session) + (let ((op (open-output-file (cdr (assoc 'estat-file session))))) + (write filterexit op) + (newline op) + (close-port op))) (exit retval) ) ) -- 2.11.0 From 2fc2772d678c091e7d73e903e90d884b5db84efa Mon Sep 17 00:00:00 2001 From: fredrik Date: Mon, 29 May 2006 19:46:48 +0000 Subject: [PATCH 14/16] Log exit status. git-svn-id: svn+ssh://svn.dolda2000.com/srv/svn/repos/src/doldaconnect@625 959494ce-11ee-0310-bf91-de5d638817bd --- lib/guile/autodl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/guile/autodl b/lib/guile/autodl index c8ce115..32eb92d 100755 --- a/lib/guile/autodl +++ b/lib/guile/autodl @@ -501,10 +501,10 @@ (let* ((ires (dc-intresp resp)) (tr (and ires (assoc (car ires) trans)))) (if tr (begin (if (eq? (cdr (assoc 'state (cdr tr))) 'done) - (begin (logf (string-append "transfer " (number->string (car ires)) " done")) + (begin (logf (string-append "transfer " (number->string (car ires)) " done (" (cadr ires) ")")) (set! trans (assq-remove! trans (car ires))) (set! done #t) - (set! filterexit (cadr tr)) + (set! filterexit (cadr ires)) (throw 'sig 0)) (begin (logf (string-append "transfer " (number->string (car ires)) " disappeared")) (set! trans (assq-remove! trans (car ires))))))))) -- 2.11.0 From a8e6bb8183d91e91e4244d55cc24829db4ce307d Mon Sep 17 00:00:00 2001 From: fredrik Date: Mon, 29 May 2006 19:55:00 +0000 Subject: [PATCH 15/16] Check for -E... git-svn-id: svn+ssh://svn.dolda2000.com/srv/svn/repos/src/doldaconnect@626 959494ce-11ee-0310-bf91-de5d638817bd --- lib/guile/autodl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/guile/autodl b/lib/guile/autodl index 32eb92d..af98f9e 100755 --- a/lib/guile/autodl +++ b/lib/guile/autodl @@ -381,7 +381,7 @@ (define (autodl-main args) (let ((dc-server #f) (done #f) (retval 0) (filterexit "")) - (let ((getopt (make-getopt (cdr args) "whs:S:e:p:t:a:I:")) (arg #f)) + (let ((getopt (make-getopt (cdr args) "whs:S:e:p:t:a:I:E:")) (arg #f)) (do ((arg (getopt) (getopt))) ((not (and (pair? arg) (char? (car arg)))) (set! args arg)) (cond ((eq? (car arg) #\h) (begin (display "usage: autodl [-s server] -S sessfile\n" (current-error-port)) -- 2.11.0 From fc068ee79fff0a9e1d6ed09253a3fbff69f79ede Mon Sep 17 00:00:00 2001 From: fredrik Date: Mon, 29 May 2006 19:59:10 +0000 Subject: [PATCH 16/16] Display filterexit instead of writing it. git-svn-id: svn+ssh://svn.dolda2000.com/srv/svn/repos/src/doldaconnect@627 959494ce-11ee-0310-bf91-de5d638817bd --- lib/guile/autodl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/guile/autodl b/lib/guile/autodl index af98f9e..5d79ce8 100755 --- a/lib/guile/autodl +++ b/lib/guile/autodl @@ -565,7 +565,7 @@ (logf "forcing quit"))) (if (assoc 'estat-file session) (let ((op (open-output-file (cdr (assoc 'estat-file session))))) - (write filterexit op) + (display filterexit op) (newline op) (close-port op))) (exit retval) -- 2.11.0