X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/9fab77dc00ff2183dd642f4f088d2d54ed3d5887..2ac3322ef9bc032ad942753a56696764aa0b0f74:/unix/uxmisc.c diff --git a/unix/uxmisc.c b/unix/uxmisc.c index 8239158e..c613a204 100644 --- a/unix/uxmisc.c +++ b/unix/uxmisc.c @@ -3,19 +3,26 @@ */ #include +#include +#include #include +#include +#include #include "putty.h" +long tickcount_offset = 0; + unsigned long getticks(void) { struct timeval tv; gettimeofday(&tv, NULL); /* - * This will wrap around approximately every 4000 seconds, i.e. - * just over an hour, which is more than enough. + * We want to use milliseconds rather than microseconds, + * because we need a decent number of them to fit into a 32-bit + * word so it can be used for keepalives. */ - return tv.tv_sec * 1000000 + tv.tv_usec; + return tv.tv_sec * 1000 + tv.tv_usec / 1000 + tickcount_offset; } Filename filename_from_str(const char *str) @@ -40,3 +47,77 @@ int filename_is_null(Filename fn) { return !*fn.path; } + +#ifdef DEBUG +static FILE *debug_fp = NULL; + +void dputs(char *buf) +{ + if (!debug_fp) { + debug_fp = fopen("debug.log", "w"); + } + + write(1, buf, strlen(buf)); + + fputs(buf, debug_fp); + fflush(debug_fp); +} +#endif + +char *get_username(void) +{ + struct passwd *p; + uid_t uid = getuid(); + char *user, *ret = NULL; + + /* + * First, find who we think we are using getlogin. If this + * agrees with our uid, we'll go along with it. This should + * allow sharing of uids between several login names whilst + * coping correctly with people who have su'ed. + */ + user = getlogin(); + setpwent(); + if (user) + p = getpwnam(user); + else + p = NULL; + if (p && p->pw_uid == uid) { + /* + * The result of getlogin() really does correspond to + * our uid. Fine. + */ + ret = user; + } else { + /* + * If that didn't work, for whatever reason, we'll do + * the simpler version: look up our uid in the password + * file and map it straight to a name. + */ + p = getpwuid(uid); + if (!p) + return NULL; + ret = p->pw_name; + } + endpwent(); + + return dupstr(ret); +} + +/* + * Display the fingerprints of the PGP Master Keys to the user. + * (This is here rather than in uxcons because it's appropriate even for + * Unix GUI apps.) + */ +void pgp_fingerprints(void) +{ + fputs("These are the fingerprints of the PuTTY PGP Master Keys. They can\n" + "be used to establish a trust path from this executable to another\n" + "one. See the manual for more information.\n" + "(Note: these fingerprints have nothing to do with SSH!)\n" + "\n" + "PuTTY Master Key (RSA), 1024-bit:\n" + " " PGP_RSA_MASTER_KEY_FP "\n" + "PuTTY Master Key (DSA), 1024-bit:\n" + " " PGP_DSA_MASTER_KEY_FP "\n", stdout); +}