Sophie

Sophie

distrib > Mageia > 3 > i586 > media > core-release-src > by-pkgid > b3543783e9bc4e3b94f6fedd2f29ad60 > files > 2

rcs-5.8.2-1.mga3.src.rpm

diff -up rcs-5.8/man/co.1in.sameuserlocks rcs-5.8/man/co.1in
--- rcs-5.8/man/co.1in.sameuserlocks	2011-01-07 13:27:18.000000000 +0100
+++ rcs-5.8/man/co.1in	2011-09-08 11:41:09.545810466 +0200
@@ -318,6 +318,10 @@ Use this option with care; it can confus
 retrieves the latest revision on the selected branch whose state is set to
 .IR state .
 .TP
+.BI \-S
+Turns on same user locks.  When this is enabled the user cannot check out
+the same file twice.
+.TP
 .B \-T
 Preserve the modification time on the \*o
 even if the \*o changes because a lock is added or removed.
diff -up rcs-5.8/src/b-excwho.c.sameuserlocks rcs-5.8/src/b-excwho.c
--- rcs-5.8/src/b-excwho.c.sameuserlocks	2011-01-07 13:27:18.000000000 +0100
+++ rcs-5.8/src/b-excwho.c	2011-09-08 11:41:09.546810466 +0200
@@ -205,9 +205,9 @@ getcaller (void)
 }
 
 bool
-caller_login_p (char const *login)
+caller_login_p (char const *login, int sameuserlocks)
 {
-  return STR_SAME (getcaller (), login);
+  return STR_SAME (getcaller (), login) && !sameuserlocks;
 }
 
 struct link *
@@ -255,7 +255,7 @@ lock_drop (struct link *box, struct link
 }
 
 int
-addlock (struct delta *delta, bool verbose)
+addlock (struct delta *delta, bool verbose, int sameuserlocks)
 /* Add a lock held by caller to ‘delta’ and return 1 if successful.
    Print an error message if ‘verbose’ and return -1 if no lock is
    added because ‘delta’ is locked by somebody other than caller.
@@ -266,7 +266,7 @@ addlock (struct delta *delta, bool verbo
 
   if (was)
     {
-      if (caller_login_p (was->login))
+      if (caller_login_p (was->login, sameuserlocks))
         return 0;
       if (verbose)
         RERR ("Revision %s is already locked by %s.", delta->num, was->login);
diff -up rcs-5.8/src/b-excwho.h.sameuserlocks rcs-5.8/src/b-excwho.h
--- rcs-5.8/src/b-excwho.h.sameuserlocks	2011-01-07 13:27:18.000000000 +0100
+++ rcs-5.8/src/b-excwho.h	2011-09-08 11:43:06.424809351 +0200
@@ -27,11 +27,11 @@ extern void seteid (void);
 extern void setrid (void);
 extern char const *getusername (bool suspicious);
 extern char const *getcaller (void);
-extern bool caller_login_p (char const *login);
+extern bool caller_login_p (char const *login, int sameuserlocks);
 extern struct link *lock_memq (struct link *ls, bool loginp, void const *x);
 extern struct rcslock const *lock_on (struct delta const *delta);
 extern void lock_drop (struct link *box, struct link *tp);
-extern int addlock (struct delta *delta, bool verbose);
+extern int addlock (struct delta *delta, bool verbose, int sameuserlocks);
 
 /* Idioms.  */
 
diff -up rcs-5.8/src/ci.c.sameuserlocks rcs-5.8/src/ci.c
--- rcs-5.8/src/ci.c.sameuserlocks	2011-08-08 14:00:25.000000000 +0200
+++ rcs-5.8/src/ci.c	2011-09-08 11:41:09.585810465 +0200
@@ -153,7 +153,7 @@ removelock (struct delta *delta)
       return -1;
     }
   rl = tp->next->entry;
-  if (! caller_login_p (rl->login))
+  if (! caller_login_p (rl->login, false))
     {
       RERR ("revision %s locked by %s", num, rl->login);
       return -1;
@@ -260,7 +260,7 @@ addbranch (struct delta *branchpoint, st
   newbranch.entry = &newdelta;
   newdelta.ilk = NULL;
   if (branchpoint->lockedby)
-    if (caller_login_p (branchpoint->lockedby))
+    if (caller_login_p (branchpoint->lockedby, false))
       return removelock (branchpoint);  /* This returns 1.  */
   return removedlock;
 }
@@ -1006,7 +1006,7 @@ main (int argc, char **argv)
             continue;
           }
 
-        if (lockflag && addlock (&newdelta, true) < 0)
+        if (lockflag && addlock (&newdelta, true, false) < 0)
           continue;
 
         if (keepflag && (pv = PREV (name)))
diff -up rcs-5.8/src/co.c.sameuserlocks rcs-5.8/src/co.c
--- rcs-5.8/src/co.c.sameuserlocks	2011-08-08 14:00:25.000000000 +0200
+++ rcs-5.8/src/co.c	2011-09-08 11:41:09.587810465 +0200
@@ -135,7 +135,7 @@ rmlock (struct delta const *delta)
     /* No lock on ‘delta’.  */
     return 0;
   rl = tp->next->entry;
-  if (!caller_login_p (rl->login))
+  if (!caller_login_p (rl->login, false))
     /* Found a lock on ‘delta’ by someone else.  */
     {
       RERR ("revision %s locked by %s; use co -r or rcs -u",
@@ -441,6 +441,7 @@ main (int argc, char **argv)
   int changelock;
   int expmode, r, workstatstat;
   bool tostdout, Ttimeflag;
+  int sameuserlocks;
   char finaldate[datesize];
 #if OPEN_O_BINARY
   int stdout_mode = 0;
@@ -464,6 +465,7 @@ main (int argc, char **argv)
   BE (pe) = X_DEFAULT;
   tostdout = false;
   Ttimeflag = false;
+  sameuserlocks = false;
 
   argc = getRCSINIT (argc, argv, &newargv);
   argv = newargv;
@@ -543,6 +545,14 @@ main (int argc, char **argv)
             }
           break;
 
+        case 'S':
+          /* 
+           *  Enable strict locks (i.e. even the same user cannot
+           *  re-check out a file with a lock that he owns.
+           */
+          sameuserlocks = true;
+          break;
+
         case 'T':
           if (*a)
             goto unknown;
@@ -699,7 +709,7 @@ main (int argc, char **argv)
             /* Check reservations.  */
             changelock = lockflag < 0
               ? rmlock (targetdelta)
-              : lockflag == 0 ? 0 : addlock (targetdelta, true);
+              : lockflag == 0 ? 0 : addlock (targetdelta, true, sameuserlocks);
 
             if (changelock < 0
                 || (changelock && !checkaccesslist ())
diff -up rcs-5.8/src/rcsclean.c.sameuserlocks rcs-5.8/src/rcsclean.c
--- rcs-5.8/src/rcsclean.c.sameuserlocks	2011-08-08 14:00:25.000000000 +0200
+++ rcs-5.8/src/rcsclean.c	2011-09-08 11:41:09.588810465 +0200
@@ -66,7 +66,7 @@ unlock (struct delta *delta)
   struct link box, *tp;
 
   if (delta && delta->lockedby
-      && caller_login_p (delta->lockedby)
+      && caller_login_p (delta->lockedby, false)
       && (box.next = GROK (locks))
       && (tp = lock_delta_memq (&box, delta)))
     {
diff -up rcs-5.8/src/rcs.c.sameuserlocks rcs-5.8/src/rcs.c
--- rcs-5.8/src/rcs.c.sameuserlocks	2011-08-08 13:58:59.000000000 +0200
+++ rcs-5.8/src/rcs.c	2011-09-08 11:41:09.590810465 +0200
@@ -495,7 +495,7 @@ breaklock (struct delta const *delta)
     }
   rl = tp->next->entry;
   before = rl->login;
-  if (!caller_login_p (before)
+  if (!caller_login_p (before, false)
       && !sendmail (num, before))
     {
       RERR ("revision %s still locked by %s", num, before);
@@ -794,8 +794,8 @@ setlock (char const *rev, struct wlink *
             RERR ("can't lock nonexisting revision %s", numrev.string);
           else
             {
-              if ((r = addlock (target, false)) < 0 && breaklock (target))
-                r = addlock (target, true);
+              if ((r = addlock (target, false, false)) < 0 && breaklock (target))
+                r = addlock (target, true, false);
               if (0 <= r)
                 {
                   if (r)
diff -up rcs-5.8/src/rcsedit.c.sameuserlocks rcs-5.8/src/rcsedit.c
--- rcs-5.8/src/rcsedit.c.sameuserlocks	2011-08-08 14:00:25.000000000 +0200
+++ rcs-5.8/src/rcsedit.c	2011-09-08 11:41:09.591810465 +0200
@@ -1086,11 +1086,11 @@ checkaccesslist (void)
 {
   struct link *ls = GROK (access);
 
-  if (!ls || stat_mine_p (&REPO (stat)) || caller_login_p ("root"))
+  if (!ls || stat_mine_p (&REPO (stat)) || caller_login_p ("root", false))
     return true;
 
   for (; ls; ls = ls->next)
-    if (caller_login_p (ls->entry))
+    if (caller_login_p (ls->entry, false))
       return true;
 
   RERR ("user %s not on the access list", getcaller ());