sorry for the delay, i'm kinda concentrating on another project. and even some real life. :D
On Wed, Mar 27, 2019 at 10:03:03PM +0100, Oliver Runge wrote: > - PassCmd is run even if if the Keychain lookup is successful > huh? that's not what i asked for. the idea is to have clear precedence rules: pass_cmd, keychain, configured password, interactive query. fail when the chosen option fails. > +AC_CANONICAL_HOST > +case "${host_os}" in > you actually want AC_CANONICAL_TARGET. > + AC_SUBST([KEYCHAIN_LIBS], ["-Wl,-framework -Wl,Security"]) > you can write that as -Wl,-framework,Security afaik. > +if test "$have_macos_keychain" = yes; then > + AC_MSG_RESULT([Using macOS Keychain]) > +else > + AC_MSG_RESULT([Not using macOS Keychain]) > +fi > for extra pedantry, you could enclose the whole thing inside a macos conditional. from which follows that trying to enable this option outside macos should be an error ... hmm, actually, maybe just ignore the whole comment. > +++ b/src/drv_imap.c > @@ -52,6 +56,8 @@ typedef struct imap_server_conf { > + char *pass_keychain_name; > + char *pass_keychain_account; > the variable names should not start with pass_. > int max_in_progress; > int cap_mask; > string_list_t *auth_mechs; > @@ -1870,6 +1876,28 @@ ensure_password( imap_server_conf_t *srvc ) > { > char *cmd = srvc->pass_cmd; > > +#ifdef HAVE_MACOS_KEYCHAIN > + if (srvc->pass_keychain_name && srvc->pass_keychain_account) { > + void *password_data; > + UInt32 password_length; > + if (SecKeychainFindGenericPassword( > + NULL, > + strlen(srvc->pass_keychain_name), > srvc->pass_keychain_name, > there should be internal spacing in the strlen() (the exception is operator-like use on string constants). that's actually a repeating problem. > + strlen(srvc->pass_keychain_account), > srvc->pass_keychain_account, > + &password_length, &password_data, > + NULL) == noErr) { > + srvc->pass = nfmalloc((password_length + 1) * > sizeof(char)); > + strncpy(srvc->pass, password_data, > (size_t)password_length); > + srvc->pass[password_length] = '\0'; > nfstrndup() ... > + SecKeychainItemFreeContent(NULL, password_data); > + } else { > if you invert the condition, you don't need an else any more. > + error( "Looking up Keychain item failed: name = %s, > account = %s\n", > + srvc->pass_keychain_name, > srvc->pass_keychain_account ); > that's not a very good message. it should be more like "lookup of ... failed: [decoded error goes here]". > +++ b/src/mbsync.1 > @@ -333,6 +333,16 @@ Prepend \fB+\fR to the command to indicate that it > produces TTY output > messier output. > .. > .TP > +\fBKeychainName\fR \fIname\fR > +Specify a name to look up in the macOS Keychain, requires > \fBKeychainAccount\fR > i kind of have no clue what "name" refers to ... the line length should be kept below 80 columns. > +to be set as well. (\fBPassCmd\fR takes precedence, if specified) > +.. > i wouldn't document the precedence; it's not done for the other keys, either. it's important to keep the logic in the code clean, but users shouldn't actually rely on it - such a config file would be rather ugly anyway. but as suggested elsewhere, it probably makes sense to mention the global keychain as a hint/recommendation. > +++ b/src/mbsyncrc.sample > @@ -21,7 +21,7 @@ Pass xxxxxxxx > #PassCmd "echo -ne 'GET myIsp\\tpassword' | pwmc datafile" > -# On Mac OS X, run "KeyChain Access" -- File->New Password Item. Fill out > form using > +# On macOS, run "KeyChain Access" -- File->New Password Item. Fill out form > using > you shouldn't fix the message's style in the same commit when you don't actually change the line otherwise. but i would expect you to actually mention that this method is discouraged i favor of the new options on macos. happy zombie jesus holiday! _______________________________________________ isync-devel mailing list isync-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/isync-devel