From: Frank T Lofaro (fl0p+@andrew.cmu.edu)
Date: 09/07/92


From: fl0p+@andrew.cmu.edu (Frank T Lofaro)
Subject: Bad limits, and a solution
Date: 7 Sep 1992 18:30:11 GMT


        I see uid's are limited to the range 0-65535. Also, negative uid's
(like those used in some systems for nobody, etc.) are translated to
65536+uid. My guess is that an unsigned short is being used. I'd suggest
that this be fixed as soon as possible, to a signed long. This will give
us a full range and eliminate the negative uid problem.

        I have heard of a university that might be in for some problems (not
CMU, yet :) because they might be running into a similar limit soon. To
avoid anything like that happening with Linux, especially since it is
used in some large installations (especially universities), it would be
good to change this. Also, networked file systems might want to use uids
>65535 to represent non-local network users. If something like this will
break old binaries or source code, it would be much better to do it now
(especially before Linux 1.0) before it gets really painful.

        Also, are userid's limited to 8 characters? 32 or 64 would be better.

        I also have trouble with hostname. Setting my hostname as pcxxxxx.pc
(actually the xxxxx's are numbers, but I don't want to advertize my
hostname to the net :) works, but pcxxxxx.pc.cc.cmu.edu, causes login to
dump core in /dev and refuse to let me login! I had to boot off floppy
to get control of my system again :( (I set it in /etc/rc). It seems the
is a size limit on the hostname that is getting exceeded. Also, for
TCP/IP, it was mentioned that it would be a good idea to put the
hostname in /etc/utmp, I wholeheartedly agree with that. When I actually
can be on the net, I'd like to have a record of who is logging (or
hacking :) into my system, and from where.

        In any event, thanks for a great operating system. I hope the changes
won't prove to be too hard. I just hope to spare us all big problems
down the road. I think I could probably just go into the source/headers
and change uid_t to an unsigned long, but that would probably break a
lot of stuff. Also, something like this needs a consenus and to be made
a standard in the Linux community.

        A better idea than just changing the uid_t to signed long might be to
have old versions of syscalls that use unsigned short uids, and new
syscalls for signed longs. (still uid_t should be changed to a signed
long so that new porgrams would support the new features). Thus the only
stuff that wouldn't work would be old binaries on a new system that uses
uids<0 or >65535. The only time one would have to recompile is if they
actually had to use the new capability. I believe this is something
along the lines of the new readdir() syscall that supports the ext fs,
but maintains backward compatibility.

        I hope this is helpful.