Browse code

freshclam bugfix (-c, -u)

git-svn-id: file:///var/lib/svn/clamav-devel/trunk/clamav-devel@322 77e5149b-7576-45b1-b177-96237e5ba77b

Tomasz Kojm authored on 2004/02/22 00:08:40
Showing 18 changed files
... ...
@@ -63,6 +63,7 @@ Alejandro Dubrovsky <s328940*student.uq.edu.au>
63 63
 Magnus Ekdahl <magnus*debian.org>
64 64
 Jason Englander <jason*englanders.cc>
65 65
 David Ford <david+cert*blue-labs.org>
66
+Michel Gaudet <Michel.Gaudet*ehess.fr>
66 67
 Luca 'NERvOus' Gibelli <nervous*clamav.net>
67 68
 Nigel Horne <njh*smsltd.demon.co.uk>
68 69
 Hrvoje Habjanic <hrvoje.habjanic*zg.hinet.hr>
... ...
@@ -1,3 +1,10 @@
1
+Sat Feb 21 16:05:42 CET 2004 (tk)
2
+---------------------------------
3
+  * freshclam: fixed problem with -u handling (missing `else' in logical block)
4
+	       Thanks to Michel GAUDET <Michel.Gaudet*ehess.fr>. The same bug
5
+	       (copy & paste) existed in -c mode.
6
+  * configure: added CLAMAV_MILTER_LIBS
7
+
1 8
 Sat Feb 21 13:38:23 CET 2004 (tk)
2 9
 ---------------------------------
3 10
   * libclamav: fixed various segmentation faults introduced by a small bug
... ...
@@ -52,7 +59,7 @@ Thu Feb 19 12:16:33 CET 2004 (tl)
52 52
 Thu Feb 19 10:05:39 GMT 2004 (njh)
53 53
 ----------------------------------
54 54
   * clamav-milter: Reworked TCPwrappers code thanks to
55
-		"Hector M. Rulot Segovia" <Hector.Rulot@uv.es>
55
+		"Hector M. Rulot Segovia" <Hector.Rulot*uv.es>
56 56
 		Changed some printf/puts to cli_dbgmsg
57 57
 
58 58
 Wed Feb 18 13:35:59 GMT 2004 (njh)
... ...
@@ -92,6 +92,7 @@ CC = @CC@
92 92
 CFGDIR = @CFGDIR@
93 93
 CLAMAVGROUP = @CLAMAVGROUP@
94 94
 CLAMAVUSER = @CLAMAVUSER@
95
+CLAMAV_MILTER_LIBS = @CLAMAV_MILTER_LIBS@
95 96
 CLAMD_LIBS = @CLAMD_LIBS@
96 97
 DBDIR = @DBDIR@
97 98
 DEPDIR = @DEPDIR@
... ...
@@ -81,7 +81,7 @@ dnl there is now a CREATE_PREFIX_TARGET_H in this file as a shorthand for
81 81
 dnl PREFIX_CONFIG_H from a target.h file, however w/o the target.h ever created
82 82
 dnl (the prefix is a bit different, since we add an extra -target- and -host-)
83 83
 dnl 
84
-dnl @version: $Id: aclocal.m4,v 1.21 2004/02/20 22:29:45 kojm Exp $
84
+dnl @version: $Id: aclocal.m4,v 1.22 2004/02/21 15:08:38 kojm Exp $
85 85
 dnl @author Guido Draheim <guidod@gmx.de>                 STATUS: used often
86 86
 
87 87
 AC_DEFUN([AC_CREATE_TARGET_H],
... ...
@@ -4041,7 +4041,7 @@ dnl      AC_COMPILE_CHECK_SIZEOF(ptrdiff_t, $headers)
4041 4041
 dnl      AC_COMPILE_CHECK_SIZEOF(off_t, $headers)
4042 4042
 dnl
4043 4043
 dnl @author Kaveh Ghazi <ghazi@caip.rutgers.edu>
4044
-dnl @version $Id: aclocal.m4,v 1.21 2004/02/20 22:29:45 kojm Exp $
4044
+dnl @version $Id: aclocal.m4,v 1.22 2004/02/21 15:08:38 kojm Exp $
4045 4045
 dnl
4046 4046
 AC_DEFUN([AC_COMPILE_CHECK_SIZEOF],
4047 4047
 [changequote(<<, >>)dnl
... ...
@@ -32,6 +32,6 @@ endif
32 32
 
33 33
 DEFS = @DEFS@ -DSENDMAIL_BIN=\"@SENDMAIL@\"
34 34
 # CLAMD_LIBS is used, because clamav-milter requires the same libraries as clamd
35
-LIBS = -L../libclamav -lclamav -L/usr/lib/libmilter -lmilter @CLAMD_LIBS@
35
+LIBS = -L../libclamav -lclamav -L/usr/lib/libmilter -lmilter @CLAMAV_MILTER_LIBS@
36 36
 INCLUDES = -I../clamd -I../libclamav -I../clamscan
37 37
 EXTRA_DIST = clamav-milter.c clamd.sh clamav-milter.sh INSTALL
... ...
@@ -92,6 +92,7 @@ CC = @CC@
92 92
 CFGDIR = @CFGDIR@
93 93
 CLAMAVGROUP = @CLAMAVGROUP@
94 94
 CLAMAVUSER = @CLAMAVUSER@
95
+CLAMAV_MILTER_LIBS = @CLAMAV_MILTER_LIBS@
95 96
 CLAMD_LIBS = @CLAMD_LIBS@
96 97
 DBDIR = @DBDIR@
97 98
 DEPDIR = @DEPDIR@
... ...
@@ -127,7 +128,7 @@ install_sh = @install_sh@
127 127
 
128 128
 DEFS = @DEFS@ -DSENDMAIL_BIN=\"@SENDMAIL@\"
129 129
 # CLAMD_LIBS is used, because clamav-milter requires the same libraries as clamd
130
-LIBS = -L../libclamav -lclamav -L/usr/lib/libmilter -lmilter @CLAMD_LIBS@
130
+LIBS = -L../libclamav -lclamav -L/usr/lib/libmilter -lmilter @CLAMAV_MILTER_LIBS@
131 131
 INCLUDES = -I../clamd -I../libclamav -I../clamscan
132 132
 EXTRA_DIST = clamav-milter.c clamd.sh clamav-milter.sh INSTALL
133 133
 subdir = clamav-milter
... ...
@@ -92,6 +92,7 @@ CC = @CC@
92 92
 CFGDIR = @CFGDIR@
93 93
 CLAMAVGROUP = @CLAMAVGROUP@
94 94
 CLAMAVUSER = @CLAMAVUSER@
95
+CLAMAV_MILTER_LIBS = @CLAMAV_MILTER_LIBS@
95 96
 CLAMD_LIBS = @CLAMD_LIBS@
96 97
 DBDIR = @DBDIR@
97 98
 DEPDIR = @DEPDIR@
... ...
@@ -92,6 +92,7 @@ CC = @CC@
92 92
 CFGDIR = @CFGDIR@
93 93
 CLAMAVGROUP = @CLAMAVGROUP@
94 94
 CLAMAVUSER = @CLAMAVUSER@
95
+CLAMAV_MILTER_LIBS = @CLAMAV_MILTER_LIBS@
95 96
 CLAMD_LIBS = @CLAMD_LIBS@
96 97
 DBDIR = @DBDIR@
97 98
 DEPDIR = @DEPDIR@
... ...
@@ -93,6 +93,7 @@ CC = @CC@
93 93
 CFGDIR = @CFGDIR@
94 94
 CLAMAVGROUP = @CLAMAVGROUP@
95 95
 CLAMAVUSER = @CLAMAVUSER@
96
+CLAMAV_MILTER_LIBS = @CLAMAV_MILTER_LIBS@
96 97
 CLAMD_LIBS = @CLAMD_LIBS@
97 98
 DBDIR = @DBDIR@
98 99
 DEPDIR = @DEPDIR@
... ...
@@ -9560,7 +9560,7 @@ cat >>confdefs.h <<\_ACEOF
9560 9560
 #define WITH_TCPWRAP 1
9561 9561
 _ACEOF
9562 9562
 
9563
-    LIBS="$LIBS -lwrap"
9563
+    CLAMAV_MILTER_LIBS="-lwrap"
9564 9564
   fi
9565 9565
 fi
9566 9566
 
... ...
@@ -9626,6 +9626,7 @@ cat >>confdefs.h <<\_ACEOF
9626 9626
 _ACEOF
9627 9627
 
9628 9628
 	CLAMD_LIBS="-lpthread"
9629
+	CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -lpthread"
9629 9630
 	if test "$want_clamuko" = "yes"; then
9630 9631
 
9631 9632
 cat >>confdefs.h <<\_ACEOF
... ...
@@ -9667,6 +9668,7 @@ solaris*)
9667 9667
     if test "$have_pthreads" = "yes"; then
9668 9668
 	LIBCLAMAV_LIBS="$LIBCLAMAV_LIBS -lpthread"
9669 9669
 	CLAMD_LIBS="-lpthread -lsocket -lnsl -lresolv"
9670
+	CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -lpthread -lsocket -lnsl -lresolv"
9670 9671
 	TH_SAFE="-thread-safe"
9671 9672
 
9672 9673
 cat >>confdefs.h <<\_ACEOF
... ...
@@ -9689,6 +9691,7 @@ freebsd*)
9689 9689
     if test "$have_pthreads" = "yes"; then
9690 9690
 	LIBCLAMAV_LIBS="$LIBCLAMAV_LIBS -pthread -lc_r"
9691 9691
 	CLAMD_LIBS="-pthread -lc_r"
9692
+	CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -pthread -lc_r"
9692 9693
 	TH_SAFE="-thread-safe"
9693 9694
 
9694 9695
 cat >>confdefs.h <<\_ACEOF
... ...
@@ -9712,6 +9715,7 @@ openbsd3.3*)
9712 9712
 	LIBCLAMAV_LIBS="$LIBCLAMAV_LIBS -pthread"
9713 9713
 	if test "$disable_cr" = "yes"; then
9714 9714
 	    CLAMD_LIBS="-pthread"
9715
+	CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -pthread"
9715 9716
 	fi
9716 9717
 	TH_SAFE="-thread-safe"
9717 9718
 	cat >>confdefs.h <<\_ACEOF
... ...
@@ -9733,8 +9737,10 @@ openbsd*)
9733 9733
 	LIBCLAMAV_LIBS="$LIBCLAMAV_LIBS -pthread"
9734 9734
 	if test "$disable_cr" = "yes"; then
9735 9735
 	    CLAMD_LIBS="-pthread"
9736
+	    CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -pthread"
9736 9737
 	else
9737 9738
 	    CLAMD_LIBS="-pthread -lc_r"
9739
+	    CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -pthread -lc_r"
9738 9740
 	fi
9739 9741
 	TH_SAFE="-thread-safe"
9740 9742
 
... ...
@@ -9800,11 +9806,13 @@ _ACEOF
9800 9800
 sco*)
9801 9801
         FRESHCLAM_LIBS="-lsocket"
9802 9802
     CLAMD_LIBS="-lsocket"
9803
+    CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -lsocket"
9803 9804
         ;;
9804 9805
 hpux*)
9805 9806
     if test "$have_pthreads" = "yes"; then
9806 9807
 	LIBCLAMAV_LIBS="$LIBCLAMAV_LIBS -lpthread"
9807 9808
 	CLAMD_LIBS="-lpthread"
9809
+	CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -lpthread"
9808 9810
 	TH_SAFE="-thread-safe"
9809 9811
 
9810 9812
 cat >>confdefs.h <<\_ACEOF
... ...
@@ -9827,6 +9835,7 @@ aix*)
9827 9827
     if test "$have_pthreads" = "yes"; then
9828 9828
 	LIBCLAMAV_LIBS="$LIBCLAMAV_LIBS -lpthread"
9829 9829
 	CLAMD_LIBS="-lpthread"
9830
+	CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -lpthread"
9830 9831
 	TH_SAFE="-thread-safe"
9831 9832
 
9832 9833
 cat >>confdefs.h <<\_ACEOF
... ...
@@ -9849,6 +9858,7 @@ irix*)
9849 9849
     if test "$have_pthreads" = "yes"; then
9850 9850
 	LIBCLAMAV_LIBS="$LIBCLAMAV_LIBS -lpthread"
9851 9851
 	CLAMD_LIBS="-lpthread"
9852
+	CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -lpthread"
9852 9853
 	TH_SAFE="-thread-safe"
9853 9854
 
9854 9855
 cat >>confdefs.h <<\_ACEOF
... ...
@@ -9879,6 +9889,7 @@ esac
9879 9879
 
9880 9880
 
9881 9881
 
9882
+
9882 9883
 if test "$have_pthreads" = "yes"; then
9883 9884
   BUILD_CLAMD_TRUE=
9884 9885
   BUILD_CLAMD_FALSE='#'
... ...
@@ -11237,6 +11248,7 @@ s,@INSTALL_FRESHCLAM_CONF_TRUE@,$INSTALL_FRESHCLAM_CONF_TRUE,;t t
11237 11237
 s,@INSTALL_FRESHCLAM_CONF_FALSE@,$INSTALL_FRESHCLAM_CONF_FALSE,;t t
11238 11238
 s,@LIBCLAMAV_LIBS@,$LIBCLAMAV_LIBS,;t t
11239 11239
 s,@CLAMD_LIBS@,$CLAMD_LIBS,;t t
11240
+s,@CLAMAV_MILTER_LIBS@,$CLAMAV_MILTER_LIBS,;t t
11240 11241
 s,@FRESHCLAM_LIBS@,$FRESHCLAM_LIBS,;t t
11241 11242
 s,@TH_SAFE@,$TH_SAFE,;t t
11242 11243
 s,@BUILD_CLAMD_TRUE@,$BUILD_CLAMD_TRUE,;t t
... ...
@@ -233,7 +233,7 @@ if test x"$tcpw" != xno; then
233 233
     fi
234 234
   else
235 235
     AC_DEFINE(WITH_TCPWRAP,1,[tcpwrappers support])
236
-    LIBS="$LIBS -lwrap"
236
+    CLAMAV_MILTER_LIBS="-lwrap"
237 237
   fi
238 238
 fi
239 239
 
... ...
@@ -257,6 +257,7 @@ linux*)
257 257
 	AC_DEFINE(CL_THREAD_SAFE,1,[thread safe])
258 258
 	AC_DEFINE(_REENTRANT,1,[thread safe])
259 259
 	CLAMD_LIBS="-lpthread"
260
+	CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -lpthread"
260 261
 	if test "$want_clamuko" = "yes"; then
261 262
 	    AC_DEFINE(CLAMUKO,1,[enable clamuko])
262 263
 	fi
... ...
@@ -283,6 +284,7 @@ solaris*)
283 283
     if test "$have_pthreads" = "yes"; then
284 284
 	LIBCLAMAV_LIBS="$LIBCLAMAV_LIBS -lpthread"
285 285
 	CLAMD_LIBS="-lpthread -lsocket -lnsl -lresolv"
286
+	CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -lpthread -lsocket -lnsl -lresolv"
286 287
 	TH_SAFE="-thread-safe"
287 288
 	AC_DEFINE(CL_THREAD_SAFE,1,[thread safe])
288 289
 	AC_DEFINE(_REENTRANT,1,[thread safe])
... ...
@@ -293,6 +295,7 @@ freebsd*)
293 293
     if test "$have_pthreads" = "yes"; then
294 294
 	LIBCLAMAV_LIBS="$LIBCLAMAV_LIBS -pthread -lc_r"
295 295
 	CLAMD_LIBS="-pthread -lc_r"
296
+	CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -pthread -lc_r"
296 297
 	TH_SAFE="-thread-safe"
297 298
 	AC_DEFINE(CL_THREAD_SAFE,1,[thread safe])
298 299
 	AC_DEFINE(_REENTRANT,1,[thread safe])
... ...
@@ -304,6 +307,7 @@ openbsd3.3*)
304 304
 	LIBCLAMAV_LIBS="$LIBCLAMAV_LIBS -pthread"
305 305
 	if test "$disable_cr" = "yes"; then
306 306
 	    CLAMD_LIBS="-pthread"
307
+	CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -pthread"
307 308
 	fi
308 309
 	TH_SAFE="-thread-safe"
309 310
 	AC_DEFINE(CL_THREAD_SAFE)
... ...
@@ -316,8 +320,10 @@ openbsd*)
316 316
 	LIBCLAMAV_LIBS="$LIBCLAMAV_LIBS -pthread"
317 317
 	if test "$disable_cr" = "yes"; then
318 318
 	    CLAMD_LIBS="-pthread"
319
+	    CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -pthread"
319 320
 	else
320 321
 	    CLAMD_LIBS="-pthread -lc_r"
322
+	    CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -pthread -lc_r"
321 323
 	fi
322 324
 	TH_SAFE="-thread-safe"
323 325
 	AC_DEFINE(CL_THREAD_SAFE,1,[thread safe])
... ...
@@ -351,12 +357,14 @@ sco*)
351 351
     dnl njh@bandsman.sco.uk: SCO Unix port
352 352
     FRESHCLAM_LIBS="-lsocket"
353 353
     CLAMD_LIBS="-lsocket"
354
+    CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -lsocket"
354 355
     dnl AC_DEFINE(NO_SNPRINTF)
355 356
     ;;
356 357
 hpux*)
357 358
     if test "$have_pthreads" = "yes"; then
358 359
 	LIBCLAMAV_LIBS="$LIBCLAMAV_LIBS -lpthread"
359 360
 	CLAMD_LIBS="-lpthread"
361
+	CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -lpthread"
360 362
 	TH_SAFE="-thread-safe"
361 363
 	AC_DEFINE(CL_THREAD_SAFE,1,[thread safe])
362 364
 	AC_DEFINE(_REENTRANT,1,[thread safe])
... ...
@@ -367,6 +375,7 @@ aix*)
367 367
     if test "$have_pthreads" = "yes"; then
368 368
 	LIBCLAMAV_LIBS="$LIBCLAMAV_LIBS -lpthread"
369 369
 	CLAMD_LIBS="-lpthread"
370
+	CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -lpthread"
370 371
 	TH_SAFE="-thread-safe"
371 372
 	AC_DEFINE(CL_THREAD_SAFE,1,[thread safe])
372 373
 	AC_DEFINE(_REENTRANT,1,[thread safe])
... ...
@@ -377,6 +386,7 @@ irix*)
377 377
     if test "$have_pthreads" = "yes"; then
378 378
 	LIBCLAMAV_LIBS="$LIBCLAMAV_LIBS -lpthread"
379 379
 	CLAMD_LIBS="-lpthread"
380
+	CLAMAV_MILTER_LIBS="$CLAMAV_MILTER_LIBS -lpthread"
380 381
 	TH_SAFE="-thread-safe"
381 382
 	AC_DEFINE(CL_THREAD_SAFE,1,[thread safe])
382 383
 	AC_DEFINE(_REENTRANT,1,[thread safe])
... ...
@@ -391,6 +401,7 @@ esac
391 391
 
392 392
 AC_SUBST(LIBCLAMAV_LIBS)
393 393
 AC_SUBST(CLAMD_LIBS)
394
+AC_SUBST(CLAMAV_MILTER_LIBS)
394 395
 AC_SUBST(FRESHCLAM_LIBS)
395 396
 AC_SUBST(TH_SAFE)
396 397
 
... ...
@@ -94,6 +94,7 @@ CC = @CC@
94 94
 CFGDIR = @CFGDIR@
95 95
 CLAMAVGROUP = @CLAMAVGROUP@
96 96
 CLAMAVUSER = @CLAMAVUSER@
97
+CLAMAV_MILTER_LIBS = @CLAMAV_MILTER_LIBS@
97 98
 CLAMD_LIBS = @CLAMD_LIBS@
98 99
 DBDIR = @DBDIR@
99 100
 DEPDIR = @DEPDIR@
... ...
@@ -92,6 +92,7 @@ CC = @CC@
92 92
 CFGDIR = @CFGDIR@
93 93
 CLAMAVGROUP = @CLAMAVGROUP@
94 94
 CLAMAVUSER = @CLAMAVUSER@
95
+CLAMAV_MILTER_LIBS = @CLAMAV_MILTER_LIBS@
95 96
 CLAMD_LIBS = @CLAMD_LIBS@
96 97
 DBDIR = @DBDIR@
97 98
 DEPDIR = @DEPDIR@
... ...
@@ -94,6 +94,7 @@ CC = @CC@
94 94
 CFGDIR = @CFGDIR@
95 95
 CLAMAVGROUP = @CLAMAVGROUP@
96 96
 CLAMAVUSER = @CLAMAVUSER@
97
+CLAMAV_MILTER_LIBS = @CLAMAV_MILTER_LIBS@
97 98
 CLAMD_LIBS = @CLAMD_LIBS@
98 99
 DBDIR = @DBDIR@
99 100
 DEPDIR = @DEPDIR@
... ...
@@ -93,6 +93,7 @@ CC = @CC@
93 93
 CFGDIR = @CFGDIR@
94 94
 CLAMAVGROUP = @CLAMAVGROUP@
95 95
 CLAMAVUSER = @CLAMAVUSER@
96
+CLAMAV_MILTER_LIBS = @CLAMAV_MILTER_LIBS@
96 97
 CLAMD_LIBS = @CLAMD_LIBS@
97 98
 DBDIR = @DBDIR@
98 99
 DEPDIR = @DEPDIR@
... ...
@@ -127,7 +127,7 @@ int freshclam(struct optstruct *opt)
127 127
     /* freshclam shouldn't work with root priviledges */
128 128
     if(optc(opt, 'u')) {
129 129
 	unpuser = getargc(opt, 'u');
130
-    } if((cpt = cfgopt(copt, "DatabaseOwner"))) {
130
+    } else if((cpt = cfgopt(copt, "DatabaseOwner"))) {
131 131
 	unpuser = cpt->strarg;
132 132
     } else {
133 133
 	unpuser = UNPUSER;
... ...
@@ -209,7 +209,7 @@ int freshclam(struct optstruct *opt)
209 209
 
210 210
 	if(optc(opt, 'c')) {
211 211
 	    checks = atoi(getargc(opt, 'c'));
212
-	} if((cpt = cfgopt(copt, "Checks"))) {
212
+	} else if((cpt = cfgopt(copt, "Checks"))) {
213 213
 	    checks = cpt->numarg;
214 214
 	} else {
215 215
 	    checks = CL_DEFAULT_CHECKS;
... ...
@@ -92,6 +92,7 @@ CC = @CC@
92 92
 CFGDIR = @CFGDIR@
93 93
 CLAMAVGROUP = @CLAMAVGROUP@
94 94
 CLAMAVUSER = @CLAMAVUSER@
95
+CLAMAV_MILTER_LIBS = @CLAMAV_MILTER_LIBS@
95 96
 CLAMD_LIBS = @CLAMD_LIBS@
96 97
 DBDIR = @DBDIR@
97 98
 DEPDIR = @DEPDIR@
... ...
@@ -92,6 +92,7 @@ CC = @CC@
92 92
 CFGDIR = @CFGDIR@
93 93
 CLAMAVGROUP = @CLAMAVGROUP@
94 94
 CLAMAVUSER = @CLAMAVUSER@
95
+CLAMAV_MILTER_LIBS = @CLAMAV_MILTER_LIBS@
95 96
 CLAMD_LIBS = @CLAMD_LIBS@
96 97
 DBDIR = @DBDIR@
97 98
 DEPDIR = @DEPDIR@