Witam!
Po pewnym czasie pracy z pakietem opie przesyłam kilka poprawek.
Pakiet buduję się i działa.
Proszę kogoś(TM) o dodanie tych poprawek do CVSu.

opie.diff - patch do speca,

opie-libopie.patch - patch poprawiający prawa do pliku i likwidujący 
błąd przy zmianie seeda.

opie-opieinfo.patch - patch przystosowujący pakiet do działania przy 
prawach 700 do pliku /etc/opie/keys

opie-opiepasswd-patch - patch zabraniający użytkownikom samodzielnego 
dodawania i usuwania się z bazy; dodatkowo workaround segfaulta, gdyż 
opiepasswd przy długości seeda > 12 segfaultuje i zachowuje się 
bardzo dziwnie przy autoryzacji(czyt. nie działa:))
 
Pozdrawiam
-- 
Artur Makutunowicz <nail2k%freeco.pl> | GSM +48508912928
GG #4657066 | Linux User #324974 | http://www.nail2k.int.pl
Linux 2.6.8 AMD_Athlon(tm)_XP_2000+ PLD Linux
--- opie.spec.dist	2005-01-15 17:14:09.000000000 +0100
+++ opie.spec	2005-01-18 11:27:42.037843600 +0100
@@ -3,7 +3,7 @@
 Summary(pl):	Zestaw programów do OPIE
 Name:		opie
 Version:	2.4
-Release:	8
+Release:	9
 Epoch:		1
 License:	NRL/TIN
 Group:		Applications/System
@@ -16,7 +16,10 @@
 Patch4:		%{name}-errno.patch
 Patch5:		%{name}-suse.patch
 Patch6:		%{name}-uint4.patch
-URL:		http://inner.net/opie/
+Patch7:		%{name}-opieinfo.patch
+Patch8:		%{name}-opiepasswd.patch
+Patch9:		%{name}-libopie.patch
+URL:		http://inner.net/opie
 BuildRequires:	autoconf >= 2.52
 BuildRequires:	bison
 Requires:	%{name}-libs = %{epoch}:%{version}
@@ -87,13 +90,17 @@
 %patch4 -p1
 %patch5 -p1
 %patch6 -p0
+%patch7 -p0
+%patch8 -p0
+%patch9 -p0
 
 %build
 %{__autoconf}
 %configure \
 	--enable-access-file=%{_sysconfdir}/opie/access \
-	--enable-user-locking=/var/lib/opie
-
+	--enable-user-locking=/var/lib/opie \
+	--enable-insecure-override
+	
 %{__make} DEBUG="%{rpmcflags} " \
 	KEY_FILE=%{_sysconfdir}/opie/keys
 
@@ -115,7 +122,7 @@
 
 %files
 %defattr(644,root,root,755)
-%attr(0755,root,root) %{_bindir}/opieinfo
+%attr(4755,root,root) %{_bindir}/opieinfo
 %attr(0755,root,root) %{_bindir}/opiekey
 %attr(0755,root,root) %{_bindir}/otp-*
 %attr(4755,root,root) %{_bindir}/opiepasswd
@@ -129,8 +136,8 @@
 %defattr(644,root,root,755)
 %doc BUG-REPORT README COPYRIGHT.NRL License.TIN
 %attr(755,root,root) %{_libdir}/lib*.so.*.*
-%dir %{_sysconfdir}/opie
-%attr(444,root,root) %{_sysconfdir}/opie/keys
+%dir %attr(700,root,root) %{_sysconfdir}/opie
+%config(noreplace) %verify(not md5 size mtime) %attr(600,root,root) %{_sysconfdir}/opie/keys
 
 %files devel
 %defattr(644,root,root,755)
--- ../opie-2.4/opieinfo.c	2005-01-17 19:18:02.381892840 +0100
+++ opieinfo.c	2005-01-17 19:28:52.875002856 +0100
@@ -73,9 +73,13 @@
     }
   }
 
-  if (optind < argc)
-    username = argv[optind];
-  else
+  if (optind < argc){
+	  if(getuid()){
+		  printf("Only root can do that\n");
+		  exit(1);
+	  }
+   	  username = argv[optind];
+  }  else
     username = getusername();
 
   if ((i = opielookup(&opie, username)) && (i != 2)) {
diff -urN ../opie-2.4/libopie/newseed.c libopie/newseed.c
--- ../opie-2.4/libopie/newseed.c	2005-01-17 19:18:02.353897096 +0100
+++ libopie/newseed.c	2005-01-17 19:23:18.257872392 +0100
@@ -55,7 +55,7 @@
 			if (++i >= max)
 				i = 1;
 
-			snprintf(c, end - c, "%d", i);
+			snprintf(c, end - c + 2, "%d", i);
 			seed[OPIE_SEED_MAX] = 0;
 			return 0;
 		}
diff -urN ../opie-2.4/libopie/readrec.c libopie/readrec.c
--- ../opie-2.4/libopie/readrec.c	2005-01-17 19:18:02.352897248 +0100
+++ libopie/readrec.c	2005-01-17 19:23:38.144849112 +0100
@@ -95,7 +95,7 @@
   FILE *f = NULL;
   int rval = -1;
 
-  if (!(f = __opieopen(KEY_FILE, 0, 0644))) {
+  if (!(f = __opieopen(KEY_FILE, 0, 0600))) {
 #if DEBUG
     syslog(LOG_DEBUG, "__opiereadrec: __opieopen(KEY_FILE..) failed!");
 #endif /* DEBUG */
diff -urN ../opie-2.4/libopie/writerec.c libopie/writerec.c
--- ../opie-2.4/libopie/writerec.c	2005-01-17 19:18:02.327901048 +0100
+++ libopie/writerec.c	2005-01-17 19:23:31.548851856 +0100
@@ -65,13 +65,13 @@
 
   switch(i) {
   case 0:
-    if (!(f = __opieopen(KEY_FILE, 1, 0644)))
+    if (!(f = __opieopen(KEY_FILE, 1, 0600)))
       return -1;
     if (fseek(f, opie->opie_recstart, SEEK_SET))
       return -1;
     break;
   case 1:
-    if (!(f = __opieopen(KEY_FILE, 2, 0644)))
+    if (!(f = __opieopen(KEY_FILE, 2, 0600)))
       return -1;
     break;
   default:
--- ../opie-2.4/opiepasswd.c	2005-01-17 19:18:02.370894512 +0100
+++ opiepasswd.c	2005-01-17 19:50:12.180518856 +0100
@@ -187,6 +187,10 @@
     printf("Updating %s:\n", pp->pw_name);
     break;
   case 1:
+    if(getuid()){
+	    printf("Only root can add users\n");
+	    exit(1);
+    }
     printf("Adding %s:\n", pp->pw_name);
     break;
   case 2:
@@ -199,8 +203,8 @@
 
   if (seed[0]) {
     i = strlen(seed);
-    if (i > OPIE_SEED_MAX) {
-      fprintf(stderr, "Seeds must be less than %d characters long.", OPIE_SEED_MAX);
+    if (i > OPIE_SEED_MAX - 4) {
+      fprintf(stderr, "Seeds must be less than %d characters long.\n", OPIE_SEED_MAX - 3);
       finish(NULL);
     }
     if (i < OPIE_SEED_MIN) {
@@ -414,7 +418,10 @@
       for (i = 0;; i++) {
 	if (i > 2)
 	  finish(NULL);
-	
+	if(getuid()){
+		printf("Only root can disable OTP access\n");
+		exit(1);
+	}
 	printf("Disable %s's OTP access? (yes or no) ", pp->pw_name);
 	if (!opiereadpass(tmp, sizeof(tmp), 1)) {
 	  fprintf(stderr, "Error reading entry.\n");
_______________________________________________
pld-devel-pl mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-devel-pl

Odpowiedź listem elektroniczym