[OpenAFS-devel] Windows build problems
Nuno Miguel Neves
nneves@di.fc.ul.pt
Fri, 23 Mar 2001 15:25:09 +0000
I've tried the first patch against VC5, and it worked. Now I have a problem, that the
compile stops because it can't find flex. I haven't done any
change to et_lex.lex.l, but it still asks. Is there any option I am overlooking?
Thanks,
Dave Koziol wrote:
>
> --On Tuesday, March 6, 2001 2:48 PM +0000 Jason Young
> <jason_young@ncsu.edu> wrote:
> >
> > Problem #1: There are a bunch of "del" commands trying to
> > delete files that don't exist (yet or at all)
> >
> > Workaround #1: Ignore failing dels,
> > run nmake /I /f NTMakefile install
>
> Here is a better solution, from an old email I sent to the list. This
> patch isn't in CVS because I don't have VC 5 to know if this works, and I
> didn't get any feedback, so I haven't submitted it. If someone could try
> it on VC 5 that would be great!
>
> Apparently, under VC 5, if del failed, it didn't halt the build. The
> problem you are having will happen in lots of places. I've addressed this
> problem with the following change to ntmakefile.i386_nt40
>
> *** c:\openafs\src\config\ntmakefile.i386_nt40 Mon Jan 22 03:36:04 2001
> --- c:\afs\openafs\src\config\ntmakefile.i386_nt40 Mon Nov 06 15:49:16 2000
> ***************
> *** 113,119 ****
>
> # Command macros.
> COPY = copy
> ! DEL = -2del
> MKDIR = mkdir
> REN = ren
> ECHO = echo
> --- 113,119 ----
>
> # Command macros.
> COPY = copy
> ! DEL = del
> MKDIR = mkdir
> REN = ren
> ECHO = echo
>
> I'm not sure if this change is compatible with VC 5, since I don't have
> access to that version, but if someone could let me know, that would be
> great so that we could get something checked in that builds with both
> versions.
>
> > a) is this specific to VS 6? (anybody done a VS6 compile?)
>
> Yes, the version checked in builds with VC 5, not 6. But I think the above
> change should fixs most of the problems. The other problem to be aware of
> is with *.et files. They either need to have unix end of line markers, or
> you need to change the lex script to handle them. See a post to the list
> in the last 2 days or so.
>
> There is also a Win2K problem with making logins work correctly. Here is
> the current work in progress patch for that. I don't think this is in CVS
> either because there are still some potential security issues with this
> change.
>
> *** c:\afs\openafs\src\winnt\afsd\smb.c Sat Nov 04 10:01:43 2000
> --- c:\openafs\src\winnt\afsd\smb.c Fri Jan 19 00:19:48 2001
> ***************
> *** 548,553 ****
> --- 548,569 ----
> return uidp;
> }
>
> + // Allows you to find an smb_user_t record by the name field
> + smb_user_t *smb_FindUserByName(smb_vc_t *vcp, char *name)
> + {
> + smb_user_t *uidp= NULL;
> +
> + lock_ObtainWrite(&smb_rctLock);
> + for(uidp = vcp->usersp; uidp; uidp = uidp->nextp) {
> + if (stricmp(uidp->name, name) == 0) {
> + uidp->refCount++;
> + break;
> + }
> + }
> + lock_ReleaseWrite(&smb_rctLock);
> + return uidp;
> + }
> +
> void smb_ReleaseUID(smb_user_t *uidp)
> {
> smb_user_t *up;
>
> *** c:\afs\openafs\src\winnt\afsd\smb.h Sat Nov 04 10:01:44 2000
> --- c:\openafs\src\winnt\afsd\smb.h Fri Jan 19 00:23:40 2001
> ***************
> *** 307,312 ****
> --- 307,314 ----
>
> extern smb_user_t *smb_FindUID(smb_vc_t *vcp, unsigned short uid, int
> flags);
>
> + extern smb_user_t *smb_FindUserByName(smb_vc_t *vcp, char *name);
> +
> extern void smb_ReleaseUID(smb_user_t *uidp);
>
> extern cm_user_t *smb_GetUser(smb_vc_t *vcp, smb_packet_t *inp);
>
> *** c:\afs\openafs\src\winnt\afsd\smb3.c Sat Nov 04 10:01:44 2000
> --- c:\openafs\src\winnt\afsd\smb3.c Fri Jan 19 14:38:20 2001
> ***************
> *** 132,150 ****
> pwd = smb_ParseString(tp, &tp);
> usern = smb_ParseString(tp, &tp);
>
> ! /* Create a new UID and cm_user_t structure */
> ! userp = cm_NewUser();
> ! lock_ObtainMutex(&vcp->mx);
> ! newUid = vcp->uidCounter++;
> ! lock_ReleaseMutex(&vcp->mx);
>
> ! /* Create a new smb_user_t structure and connect them up */
> ! uidp = smb_FindUID(vcp, newUid, SMB_FLAG_CREATE);
> ! lock_ObtainMutex(&uidp->mx);
> ! uidp->userp = userp;
> ! uidp->name = strdup(usern);
> ! lock_ReleaseMutex(&uidp->mx);
> ! smb_ReleaseUID(uidp);
>
> if (dead_vcp) {
> dead_uidp = dead_vcp->usersp;
> --- 132,164 ----
> pwd = smb_ParseString(tp, &tp);
> usern = smb_ParseString(tp, &tp);
>
> ! // On Windows 2000, this function appears to be called more often than
> ! // it is expected to be called. This resulted in multiple smb_user_t
> ! // records existing all for the same user session which results in all
> ! // of the users tokens disappearing.
> ! //
> ! // To avoid this problem, we look for an existing smb_user_t record
> ! // based on the users name, and use that one if we find it.
> ! if (uidp = smb_FindUserByName(vcp, usern)) {
> ! userp = uidp->userp;
> ! newUid = (unsigned short)uidp->userID; // For some reason these are
> different types!
> ! smb_ReleaseUID(uidp);
> ! }
> ! else {
> ! /* Create a new UID and cm_user_t structure */
> ! userp = cm_NewUser();
> ! lock_ObtainMutex(&vcp->mx);
> ! newUid = vcp->uidCounter++;
> ! lock_ReleaseMutex(&vcp->mx);
>
> ! /* Create a new smb_user_t structure and connect them up */
> ! uidp = smb_FindUID(vcp, newUid, SMB_FLAG_CREATE);
> ! lock_ObtainMutex(&uidp->mx);
> ! uidp->userp = userp;
> ! uidp->name = strdup(usern);
> ! lock_ReleaseMutex(&uidp->mx);
> ! smb_ReleaseUID(uidp);
> ! }
>
> if (dead_vcp) {
> dead_uidp = dead_vcp->usersp;
>
> > b) has everyone else that has done a successful build
> > had to go through this?
>
> Yes, I've had everything build, and the client stuff work on Win2K. Again
> this patch
>
> Good luck,
>
> Dave Koziol | dkoziol@dragonflymobile.com
> Contract Software Development
> _______________________________________________
> OpenAFS-devel mailing list
> OpenAFS-devel@openafs.org
> https://lists.openafs.org/mailman/listinfo.cgi/openafs-devel
--
nneves@di.fc.ul.pt Dept. Informatica, Fac. Ciencias,
|\ | |\ | Tel: +351 21 7500528 Univ. Lisboa, Bloco C5, Campo Grande
| \|uno | \|eves Fax: +351 21 7500084 1700 Lisboa, Portugal