#include <stdio.h>
#include <string.h>
#include <sys/types.h>
+#include <sys/stat.h>
/* I'm not sure if this is exactly the right test...
Might __APPLE__ be defined if this is apple hardware, but not
an Apple OS?
- Thanks to Jan Kujawa <kujawa@ultranet.com> for the MacOS X code.
+ Thanks to Alexei Kosut <akosut@stanford.edu> for the MacOS X code.
*/
#ifdef __APPLE__
# define HAVE_DARWIN
we are. Calling it ive_got_your_local_function_right_here_buddy()
would have been rude.
*/
+#ifndef HAVE_DARWIN
static int
key_to_key(char *user, char *instance, char *realm, char *passwd, C_Block key)
{
memcpy(key, passwd, sizeof(des_cblock));
return (0);
}
+#endif /* !HAVE_DARWIN */
/* Called to see if the user's typed password is valid. We do this by asking
the kerberos server for a ticket and checking to see if it gave us one.
C_Block mitkey;
Bool success;
char *newtkfile;
+ int fh = -1;
/* temporarily switch to a new ticketfile.
I'm not using tmpnam() because it isn't entirely portable.
newtkfile = malloc(80 * sizeof(char));
memset(newtkfile, 0, sizeof(newtkfile));
- sprintf(newtkfile, "/tmp/xscrn-%i", getpid());
+ sprintf(newtkfile, "/tmp/xscrn-%i.XXXXXX", getpid());
+
+ if( (fh = mkstemp(newtktfile)) < 0)
+ {
+ free(newtktfile);
+ return(False);
+ }
+ if( fchmod(fh, 0600) < 0)
+ {
+ free(newtktfile);
+ return(False);
+ }
+
krb_set_tkt_string(newtkfile);
krb_set_tkt_string(tk_file);
free(newtkfile);
memset(mitkey, 0, sizeof(mitkey));
+ close(fh); /* #### tom: should the file be removed? */
/* Did we verify successfully? */