[ovs-dev] [PATCH] uuid: Use current time to compute sha.
Ben Pfaff
blp at nicira.com
Tue Mar 11 22:41:56 UTC 2014
On Mon, Mar 10, 2014 at 10:56:38AM -0700, Gurucharan Shetty wrote:
> Windows does not have the getppid(), getuid(), getgid() functions.
> We do get a random seed from CryptGenRandom(). That seed along with
> process id and current time hopefully is good enough.
>
> Signed-off-by: Gurucharan Shetty <gshetty at nicira.com>
I see that there was a bug that 'now' wasn't getting folded in. Let's
fix that for all systems, not just for Windows.
I think that this could be a little nicer by adding a function like
this:
static void
sha1_update_int(struct sha1 *sha1_ctx, uintmax_t x)
{
sha1_update(sha1_ctx, &x, sizeof x);
}
and then we can delete the variables and the assignments and the
changes to windefs.h and just write:
sha1_update_int(&sha1_ctx, getpid());
#ifndef _WIN32
sha1_update_int(&sha1_ctx, getppid());
sha1_update_int(&sha1_ctx, getuid());
sha1_update_int(&sha1_ctx, getgid());
#endif
> ---
> include/windows/windefs.h | 4 ++++
> lib/uuid.c | 6 ++++++
> 2 files changed, 10 insertions(+)
>
> diff --git a/include/windows/windefs.h b/include/windows/windefs.h
> index 6d36adc..6fde1ea 100644
> --- a/include/windows/windefs.h
> +++ b/include/windows/windefs.h
> @@ -32,4 +32,8 @@
> #define u_int32_t uint32_t
> #define u_int64_t uint64_t
>
> +typedef int pid_t;
> +typedef int uid_t;
> +typedef int gid_t;
> +
> #endif /* windefs.h */
> diff --git a/lib/uuid.c b/lib/uuid.c
> index 315c851..9ac5b55 100644
> --- a/lib/uuid.c
> +++ b/lib/uuid.c
> @@ -220,17 +220,23 @@ do_init(void)
> get_entropy_or_die(random_seed, sizeof random_seed);
> xgettimeofday(&now);
> pid = getpid();
> +#ifndef _WIN32
> ppid = getppid();
> uid = getuid();
> gid = getgid();
> +#endif
>
> /* Convert seed into key. */
> sha1_init(&sha1_ctx);
> sha1_update(&sha1_ctx, random_seed, sizeof random_seed);
> sha1_update(&sha1_ctx, &pid, sizeof pid);
> +#ifndef _WIN32
> sha1_update(&sha1_ctx, &ppid, sizeof ppid);
> sha1_update(&sha1_ctx, &uid, sizeof uid);
> sha1_update(&sha1_ctx, &gid, sizeof gid);
> +#else
> + sha1_update(&sha1_ctx, &now, sizeof now);
> +#endif
> sha1_final(&sha1_ctx, sha1);
>
> /* Generate key. */
More information about the dev
mailing list