You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@subversion.apache.org by Tristan Slominski <tr...@gmail.com> on 2014/01/06 20:40:58 UTC

what do I hash to get .subversion/auth/svn.simple file name?

Hi,

I thought this was going to be easy to find out, but after hours
researching this and trying different things, I still don't know how to
answer the question.

I posted it on stack overflow here:
http://stackoverflow.com/questions/20952004/subversion-auth-svn-simple-hash-algorithm

It boils down to this:

Given ~/.subversion/auth/svn.simple/5671adf2865e267db74f09ba6f872c28 with
the contents of:

K 8
username
V 3
joe
K 8
password
V 4
blah
K 15
svn:realmstring
V 45
<https://svn.domain.com:443> Joe's repository
END

What string to I hash to get 5671adf2865e267db74f09ba6f872c28?

I tried md5 hashing a lot of strings (first one being "<
https://svn.domain.com:443> Joe's repository"), and I can't find one that
generates the correct hash.

Cheers,

Tristan

Re: what do I hash to get .subversion/auth/svn.simple file name?

Posted by Tristan Slominski <tr...@gmail.com>.
Thank you Bert for the explanation and the cautions. I will definitely heed
them and after spending hours on this I'll probably remember the context
for this decision for quite a while :)


On Mon, Jan 6, 2014 at 2:06 PM, Bert Huijben <be...@qqmail.nl> wrote:

> First: Note this is an implementation detail. We don’t promise that this
> format stays compatible over versions, and with a default client you would
> see that the password on Windows is crypted in this file.
>
>
>
> In the current implementation the hash string is constructed in
> subversion/libsvn_subr/config_auth.c’s function svn_auth__file_path()
>
>
>
> [[
>
> svn_error_t *
>
> svn_auth__file_path(const char **path,
>
>                     const char *cred_kind,
>
>                     const char *realmstring,
>
>                     const char *config_dir,
>
>                     apr_pool_t *pool)
>
> {
>
>   const char *authdir_path, *hexname;
>
>   svn_checksum_t *checksum;
>
>
>
>   /* Construct the path to the directory containing the creds files,
>
>      e.g. "~/.subversion/auth/svn.simple".  The last component is
>
>      simply the cred_kind.  */
>
>   SVN_ERR(svn_config_get_user_config_path(&authdir_path, config_dir,
>
>                                           SVN_CONFIG__AUTH_SUBDIR, pool));
>
>   if (authdir_path)
>
>     {
>
>       authdir_path = svn_dirent_join(authdir_path, cred_kind, pool);
>
>
>
>       /* Construct the basename of the creds file.  It's just the
>
>          realmstring converted into an md5 hex string.  */
>
>       SVN_ERR(svn_checksum(&checksum, svn_checksum_md5, realmstring,
>
>                            strlen(realmstring), pool));
>
>       hexname = svn_checksum_to_cstring(checksum, pool);
>
>
>
>       *path = svn_dirent_join(authdir_path, hexname, pool);
>
>     }
>
>   else
>
>     *path = NULL;
>
>
>
>   return SVN_NO_ERROR;
>
> }
>
> ]]
>
>
>
> So we calculate the md5 hash over the realm string in UTF-8 form (your
> first guess)
>
>
>
> But as noted: you should not rely on this. This format may change at any
> time.
>
> Functions like svn_config_walk_auth_data() provide a stable api against
> future versions, while this storage will probably change at some point, and
> is certainly incompatible with other backends like keychains, etc.
>
>
>
>                 Bert
>
>
>
>
>
> *From:* Tristan Slominski [mailto:tristan.slominski@gmail.com]
> *Sent:* maandag 6 januari 2014 20:41
> *To:* users@subversion.apache.org
> *Subject:* what do I hash to get .subversion/auth/svn.simple file name?
>
>
>
> Hi,
>
>
>
> I thought this was going to be easy to find out, but after hours
> researching this and trying different things, I still don't know how to
> answer the question.
>
>
>
> I posted it on stack overflow here:
> http://stackoverflow.com/questions/20952004/subversion-auth-svn-simple-hash-algorithm
>
>
>
> It boils down to this:
>
>
> Given ~/.subversion/auth/svn.simple/5671adf2865e267db74f09ba6f872c28 with
> the contents of:
>
> K 8
> username
> V 3
> joe
> K 8
> password
> V 4
> blah
> K 15
> svn:realmstring
> V 45
> <https://svn.domain.com:443> Joe's repository
> END
>
> What string to I hash to get 5671adf2865e267db74f09ba6f872c28?
>
> I tried md5 hashing a lot of strings (first one being "<
> https://svn.domain.com:443> Joe's repository"), and I can't find one that
> generates the correct hash.
>
>
>
> Cheers,
>
>
>
> Tristan
>

RE: what do I hash to get .subversion/auth/svn.simple file name?

Posted by Bert Huijben <be...@qqmail.nl>.
First: Note this is an implementation detail. We don't promise that this
format stays compatible over versions, and with a default client you would
see that the password on Windows is crypted in this file.

 

In the current implementation the hash string is constructed in
subversion/libsvn_subr/config_auth.c's function svn_auth__file_path()

 

[[

svn_error_t *

svn_auth__file_path(const char **path,

                    const char *cred_kind,

                    const char *realmstring,

                    const char *config_dir,

                    apr_pool_t *pool)

{

  const char *authdir_path, *hexname;

  svn_checksum_t *checksum;

 

  /* Construct the path to the directory containing the creds files,

     e.g. "~/.subversion/auth/svn.simple".  The last component is

     simply the cred_kind.  */

  SVN_ERR(svn_config_get_user_config_path(&authdir_path, config_dir,

                                          SVN_CONFIG__AUTH_SUBDIR, pool));

  if (authdir_path)

    {

      authdir_path = svn_dirent_join(authdir_path, cred_kind, pool);

 

      /* Construct the basename of the creds file.  It's just the

         realmstring converted into an md5 hex string.  */

      SVN_ERR(svn_checksum(&checksum, svn_checksum_md5, realmstring,

                           strlen(realmstring), pool));

      hexname = svn_checksum_to_cstring(checksum, pool);

 

      *path = svn_dirent_join(authdir_path, hexname, pool);

    }

  else

    *path = NULL;

 

  return SVN_NO_ERROR;

}

]]

 

So we calculate the md5 hash over the realm string in UTF-8 form (your first
guess)

 

But as noted: you should not rely on this. This format may change at any
time. 

Functions like svn_config_walk_auth_data() provide a stable api against
future versions, while this storage will probably change at some point, and
is certainly incompatible with other backends like keychains, etc.

 

                Bert

 

 

From: Tristan Slominski [mailto:tristan.slominski@gmail.com] 
Sent: maandag 6 januari 2014 20:41
To: users@subversion.apache.org
Subject: what do I hash to get .subversion/auth/svn.simple file name?

 

Hi,

 

I thought this was going to be easy to find out, but after hours researching
this and trying different things, I still don't know how to answer the
question.

 

I posted it on stack overflow here:
http://stackoverflow.com/questions/20952004/subversion-auth-svn-simple-hash-
algorithm

 

It boils down to this:


Given ~/.subversion/auth/svn.simple/5671adf2865e267db74f09ba6f872c28 with
the contents of:

K 8
username
V 3
joe
K 8
password
V 4
blah
K 15
svn:realmstring
V 45
<https://svn.domain.com:443> Joe's repository
END

What string to I hash to get 5671adf2865e267db74f09ba6f872c28?

I tried md5 hashing a lot of strings (first one being
"<https://svn.domain.com:443> Joe's repository"), and I can't find one that
generates the correct hash.

 

Cheers,

 

Tristan


Re: what do I hash to get .subversion/auth/svn.simple file name?

Posted by Tristan Slominski <tr...@gmail.com>.
My poor use of command line was at fault when diagnosing this issue. I did
not use -n option when invoking echo.

Thank you very much!


On Mon, Jan 6, 2014 at 2:03 PM, Stefan Sperling <st...@elego.de> wrote:

> On Mon, Jan 06, 2014 at 01:40:58PM -0600, Tristan Slominski wrote:
> > Hi,
> >
> > I thought this was going to be easy to find out, but after hours
> > researching this and trying different things, I still don't know how to
> > answer the question.
> >
> > I posted it on stack overflow here:
> >
> http://stackoverflow.com/questions/20952004/subversion-auth-svn-simple-hash-algorithm
> >
> > It boils down to this:
> >
> > Given ~/.subversion/auth/svn.simple/5671adf2865e267db74f09ba6f872c28 with
> > the contents of:
> >
> > K 8
> > username
> > V 3
> > joe
> > K 8
> > password
> > V 4
> > blah
> > K 15
> > svn:realmstring
> > V 45
> > <https://svn.domain.com:443> Joe's repository
> > END
> >
> > What string to I hash to get 5671adf2865e267db74f09ba6f872c28?
>
> The creds file's name is indeed the MD5 checksum of the realmstring.
> This code generates the name (in subversion/libsvn_subr/config_auth.c):
>
>       /* Construct the basename of the creds file.  It's just the
>          realmstring converted into an md5 hex string.  */
>       SVN_ERR(svn_checksum(&checksum, svn_checksum_md5, realmstring,
>                            strlen(realmstring), pool));
>       hexname = svn_checksum_to_cstring(checksum, pool);
>
>       *path = svn_dirent_join(authdir_path, hexname, pool);
>
> > https://svn.domain.com:443> Joe's repository"), and I can't find one
> that
> > generates the correct hash.
>
> I'm not sure why your example doesn't work, but with a data set
> of mine I get the right hash:
>
> $ cd ~/.subversion/auth/svn.simple
> $ echo -n "<https://svn.apache.org:443> ASF Committers:443> ASF
> Committers" | md5
> d3c8a345b14f6a1b42251aef8027ab57
> $ grep ASF ./d3c8a345b14f6a1b42251aef8027ab57
> <https://svn.apache.org:443> ASF Committers
> $
>

Re: what do I hash to get .subversion/auth/svn.simple file name?

Posted by Stefan Sperling <st...@elego.de>.
On Mon, Jan 06, 2014 at 01:40:58PM -0600, Tristan Slominski wrote:
> Hi,
> 
> I thought this was going to be easy to find out, but after hours
> researching this and trying different things, I still don't know how to
> answer the question.
> 
> I posted it on stack overflow here:
> http://stackoverflow.com/questions/20952004/subversion-auth-svn-simple-hash-algorithm
> 
> It boils down to this:
> 
> Given ~/.subversion/auth/svn.simple/5671adf2865e267db74f09ba6f872c28 with
> the contents of:
> 
> K 8
> username
> V 3
> joe
> K 8
> password
> V 4
> blah
> K 15
> svn:realmstring
> V 45
> <https://svn.domain.com:443> Joe's repository
> END
> 
> What string to I hash to get 5671adf2865e267db74f09ba6f872c28?

The creds file's name is indeed the MD5 checksum of the realmstring.
This code generates the name (in subversion/libsvn_subr/config_auth.c):

      /* Construct the basename of the creds file.  It's just the
         realmstring converted into an md5 hex string.  */
      SVN_ERR(svn_checksum(&checksum, svn_checksum_md5, realmstring,
                           strlen(realmstring), pool));
      hexname = svn_checksum_to_cstring(checksum, pool);

      *path = svn_dirent_join(authdir_path, hexname, pool);

> https://svn.domain.com:443> Joe's repository"), and I can't find one that
> generates the correct hash.

I'm not sure why your example doesn't work, but with a data set
of mine I get the right hash:

$ cd ~/.subversion/auth/svn.simple
$ echo -n "<https://svn.apache.org:443> ASF Committers:443> ASF Committers" | md5
d3c8a345b14f6a1b42251aef8027ab57
$ grep ASF ./d3c8a345b14f6a1b42251aef8027ab57
<https://svn.apache.org:443> ASF Committers
$ 

Re: what do I hash to get .subversion/auth/svn.simple file name?

Posted by bosmolskate <se...@yahoo.com>.
Complicated coding going on here, but I think it is starting to make more
sense to me



-----
http://www.seooptimizers.com 
http://yourinternetmarketers.com 
news blog 
seo courses 




--
View this message in context: http://subversion.1072662.n5.nabble.com/what-do-I-hash-to-get-subversion-auth-svn-simple-file-name-tp186470p186666.html
Sent from the Subversion Users mailing list archive at Nabble.com.

Re: what do I hash to get .subversion/auth/svn.simple file name?

Posted by Ben Reser <be...@reser.org>.
On 1/6/14, 11:40 AM, Tristan Slominski wrote:
> Given ~/.subversion/auth/svn.simple/5671adf2865e267db74f09ba6f872c28 with the
> contents of:
> 
> K 8
> username
> V 3
> joe
> K 8
> password
> V 4
> blah
> K 15
> svn:realmstring
> V 45
> <https://svn.domain.com:443> Joe's repository
> END
> 
> What string to I hash to get 5671adf2865e267db74f09ba6f872c28?
> 
> I tried md5 hashing a lot of strings (first one being
> "<https://svn.domain.com:443> Joe's repository"), and I can't find one that
> generates the correct hash.

It's the value in svn:realmstring which is apparently the one you tried first
but must have made some mistake (I'd guess a trailing character if you're using
the md5sum command).

I see on StackOverflow that you figured it out.  For reference the code
responsible for this is in svn_auth__file_path() which lives in
subversion/libsvn_subr/config_auth.c

Link to the code in trunk:
https://svn.apache.org/repos/asf/subversion/trunk/subversion/libsvn_subr/config_auth.c