GDBM Goes International
Version 1.10, the first internationalized version of GNU DBM is finally available. It is shipped with the following localizations: Finnish, Japanese, German, Polish and Ukrainian.
And as a minor note: no, this time I did not take part in the latter two localizations.
GDBM again
And now, after less than one day of delay (sic!) comes a new version of it: GDBM 1.9.1.
CFPEEK
Cfpeek is a tool for processing of structured configuration files. The first stable release is available for download.
GINT
Important change in the GINT repository. Users are advised to pull.
Jabber Over HTTP -- version 1.2
JOH version 1.2 is available for download. New features in this version:
- Support for "HTTP CONNECT" proxying.
-
"HTTP CONNECT" method is considerably faster than XEP-0025. It also imposes less strain on the TCP/IP connection. It is supported by several Jabber clients, among them Psi and Mcabber.
- ACLs for requested Jabber servers.
-
Both incoming connections and the addresses of the requested Jabber servers are protected by TCP wrappers. This allows system administrators to control the set of remote XMPP servers available for proxying.
- Special handling for GET requests.
-
A GET request usually means that someone has pointed his web browser to the URL served by johd or joh.cgi. Both programs can now be configured to either return a 404 response with a configurable HTML content, or to redirect the request to another web server. As an example, see ulysses.gnu.org.ua.
Jabber Over HTTP
JOH provides a flexible HTTP Polling proxy which enables access to Jabber ports via HTTP requests. It is easily integrated to jabber2, which lacks built-in support for XEP-0025.
Smap v1.1 released
Smap version 1.1 was released today.
Smap
Smap is a flexible socket map server with a set of tools and loadable modules for configuring complex socket map systems.
It also provides an API for implementing new modules in C or in Guile.
Version 1.0 released today.
Compiling Guile 1.9.x
It is a small reminder on how to compile Guile 1.9.x.
Prerequisites
You will need:
- libunistring.
- Boehm's garbage collector (libgc)
- libffi.
The latter is normally installed on any GNU/Linux system as a part of Gcc package.
Configuration
Guile's configure script relies on pkg-config to locate its
prerequisites. A very unfortunate choice, in my opinion. On most
boxes where I tried to configure it, a plain invocation of
configure without additional options proved unable to
locate prerequisite components. One may, of course, edit pc
files to placate pkg-config, but it's rather
counter-productive. So, I prefer to simply ignore pkg-config
and get away without it.
That being said, and supposing you have Gcc version 4.2.4 and
libgc installed in /usr/local/include, the
following command should correctly configure the package:
./configure LIBFFI_LIBS=-lffi LIBFFI_CFLAGS=-I/usr/lib/gcc/i486-slackware-linux/4.2.4/include \
BDW_GC_LIBS=-lgc BDW_GC_CFLAGS=-I/usr/local/include
Once done with the configure, launch make and
switch to some other activity. It is no use sitting and staring at
the monitor, because the build takes quite some time. On my box, for
example, the compilation lasted 23 minutes.
Gamma
New version of Gamma is finally available for download. It is a considerable leap forward, which caused a kind of chain reaction in another projects. See below.
XMLTools
Following the release of Gamma 2.0, the XMLTools dropped support for Mixp, and switched to Gamma to make use of the new possibilities. This includes, in particular, better error reporting, faster and more flexible parsing.
Ellinika
Finally, these changes were applied to Ellinika web site to improve its appearance.
The development version of the site is also available (append -dev to the main site name).
Wydawca Version 2.1 "KMB" is available for download.
The most important change in this version is a check script feature, which allows to verify the uploaded tarballs before making them visible and even to decide whether or not to accept them.
This feature is already used in Puszcza to catch releases containing CVE-2009-4029 vulnerability.
BackUPS Pro 280 Battery Constant
For the record: the battery constant for BackUPS Pro 280 is BA.
If this model shows incredibly low runtime on a new, 100% loaded battery and the state persists even after calibration, try resetting the constant to this value. To do so, follow these instructions.
Id est, patres conscripti...
New version of gnupload script.
Wyslij-po 2.0
As part of the update compain following the release of GNU Mailutils 2.0, the version 2.0 of wyslij-po is released.
Mirroring SVN to Git
Puszcza now offers a one-way mirror of its SVN repositories to Git. This article explains the techniques used to implement it.
The basic prerequisites are:
- SVN repositories are located under
$SVNROOT - Git repositorise are located under
$GITROOT - In both cases, each project has its own repository
- Git version 1.6.0 or later is used
Creating the Mirror
The initial mirror is created using git-svn:
git svn clone -A$AUTHORS -s $SVNROOT/$PROJECT $GITROOT/$PROJECT
It is supposed that $PROJECT is the project name,
and $AUTHORS contains full pathname of the authors file.
The -s switch tells git-svn to assume the
standard layout of the source SVN repository
(i.e. trunk/, tags/, branches/).
When this command finishes, $GITROOT/$PROJECT will contain
a valid Git repository set up for two-way intercommunication with
the SVN repository $SVNROOT/$PROJECT. Any existing SVN tags
and branches are mapped to remote Git
branches. A tag $SVNROOT/$PROJECT/tags/foo becomes
branch tags/foo. A
branch $SVNROOT/$PROJECT/branches/bar becomes Git
branch bar.
This mapping is OK for mirroring, but is a bit inconvenient, because tags and branches are not visible using the gitweb interface.
To fix this, I provide local tracks for each remote branch:
cd $GITROOT/$PROJECT
git branch -r |
while read tag
do
case $tag in
tags/*) localtag=${tag##tags/}
git tag $localtag $tag
;;
trunk) ;;
*) git branch --track ${HEADPFX}$tag $tag
;;
esac
done
Note $HEADPFX in the last git-branch
invocation. Theoretically, a local branch can have the same name as
the remote one it tracks. However such setup makes git
issue lots of spurious diagnostics in the form:
warning: refname 'release_4_4_patches' is ambiguous.
when doing various Git operations, e.g. git checkout.
It is also possible that such duplicate names could cause other,
more serious problems with Git. I have not checked this, so I am not
sure. Nevertheless, I prefer to stay on the safe side and to prefix
all local branches with some unique string, so they differ from the
remote ones. In my config I set HEADPFX=git-.
To finish the initial set up, we also need to install a pre-receive hook, which will forbid pushing to this repository.
I use the following hook:
#! /bin/sh SVN=$(git config --get svn-remote.svn.url) cat >&2 <<EOT ---------------------------- WARNING! ---------------------------- This repository is a one-way mirror of the SVN repository at $SVN Pushing to this repository is administratively prohibited. If you wish to drop SVN and switch to Git, please drop an email to <root@domain> saying so. Make sure the email is GPG-signed. ---------------------------- WARNING! ---------------------------- EOT exit 1
The git-svn-mirror-create
script does all that. To create a mirror of a
project foo one will simply
run: git-svn-mirror-create foo.
The created repository is not bare. To provide a
usual project.git repository, I place Git mirrors in a
subdirectory, and then symlink the $PROJECT/.git
subdirectory to $GITROOT/$PROJECT.git.
Maintaining the Mirror
Basically, the following commands will keep the currently checked out branch in sync with the SVN:
git svn fetch git svn rebase -l
However, this will not update other branches, so the same operation needs be repeated for each branch:
cd $GITROOT/$PROJECT
git branch | sed 's/^\*//' | tr -d ' ' | tee $BRANCHLIST |
while read branch
do
git checkout $branch
git svn fetch
git svn rebase -l
done
git checkout master
The file $BRANCHLIST keeps a temporary list of
branches. This list is used by the code below to determine whether
any new branches were created in the SVN, and, if so, to mirror
them:
echo "Checking for new branches & tags..."
git tag > $TAGLIST
git branch -r |
while read tag
do
case $tag in
tags/*) localtag=${tag##tags/}
if ! grep -q "^${localtag}\$" $TAGLIST; then
echo "Mapping $tag to $localtag"
git tag $localtag $tag
fi;;
trunk) ;;
*) if ! grep -q "^${HEADPFX}${tag}\$" $BRANCHLIST; then
echo "Tracking $tag as ${HEADPFX}$tag"
git branch --track ${HEADPFX}$tag $tag
fi;;
esac
done
These operations are performed by the script git-svn-mirror-synch, which takes the project name as its argument. This script should be executed as a cron job.
Unbinding the Mirror
After running SVN and Git in parrallel for some time, the project maintainer will probably decide to drop SVN and to switch to Git entirely.
This is done by git-svn-mirror-finish script. This script does the following:
- Removes remote branches;
- Renames local branches, by removing the
$HEADPFXprefix; - Removes SVN-related sections from
.git/config; - Disables the pre-receive hook;
The sysadmin is then supposed to convert the repository to bare format and to remove checked out sources. E.g.:
cd .svn-mirror mv .svn-mirror/$PROJECT/.git $PROJECT.git rm -rf .svn-mirror/$PROJECT/ cd $PROJECT.git git config bool core.bare true
Gacopyz
Gacopyz, panie, to mówią ze to mysa... Ze to tako mysa co świeckę w kościele zjadła i wniebowstąpienia dostąpiła. A to nie je mysa, ino gacopyz! To nadprzyrodzłyne, to głową na dół śpi!Rozprawa o robokach,
Kazimierz Grześkowiak
Libgacopyz to nowa biblioteka obsługi protokołu Milter,
z której korzysta
Mailfromd. Biblioteka zawiera zupełnie nowy API, który niedługo
zostanie w pełni zadokumentowanty. Ma się rozumieć że obsługuje rówinież
"tradycyjny" API, dzięki czemu przejście z libmilter na
libgacopyz nie wymaga specjalnego wysiłku.
|
Stanisław Lem nie żyje... |
Mirror of kervarker in Ukraine
Kervarker.org is a server dedicated to Breton language since 1995. It is run by Romuald Texier. Now we provide its mirror.
Degemer mat!
|
I dag er Thor Heyerdahls gebursdagen. Jeg lengter etter ham nå som han er bort... Det er en utmerket biografi om Thor på Kon-Tiki siden. Legg dessuten merke til valget av den vesentligste Nordmann, arrangert av NRK. Thor er en av kandidatene. Gi stemmen din til ham. |
GNU.ORG.UA finally has new DNS!
Домени GNU.ORG.UA та TUHS.ORG.UA нарешті мають третій DNS.
Огромна подяка хлопцям з Івано-Франківська та Адріанові Барану зі Львова!
Domeny GNU.ORG.UA i TUHS.ORG.UA nareszcie mają trzeci DNS.
Wielkie dzięki chłopcom z Iwano-Frankiwska (Stanisławowa) i Adrianowi Baranowi ze Lwowa!
Cflow: heading for the release
The documentation for the GNU cflow project is finally available. I ask you to kindly take a look and report me your opinions, suggestions and the like.
Also, new alpha release is available for download. Give it a try!
Finally, the first stable release (version 1.0) is planned for this saturday.
Straight to the business: first, the very first batch of fotos from Lwow is available (it probably will take me at least a couple of weeks to publish them all, at the present rate ...) Anyway, enjoy! If the gallery is missing a translation to your native language, just let me know.
Secondly, thanks to Wojciech's kind assistance, we have managed to bring
mailutils namespace to
a unified form. It is a great step for our team. Just think that currently
mailutils codebase counts 193759 lines of C text, this will
show you what it feels like to ferret out all this code, changing global symbols,
without breaking anything. Should you ever plan to go into such a risky
adventure, consider using this script. The docs are also available. If these are not enough, write me, I'll be glad to
answer your questions.
To tell the truth, I have never thought I would wish to make my scripts repository available, but now I think I should do it.
Returning to mailutils, now that it has taken its new form, I have finally
undertaken final API cleanup. First goes mu_folder_list and friends.
Untill now it has been (1) non-recursive, and (2) used a kludgy
struct folder_list, which seems to have been a leftover from the dark
times when mu_list_t has not yet been there... So, this has changed. Now,
one can write:
mu_folder_t folder;
mu_list_t list;
mu_folder_create (&folder, dir);
mu_folder_open (folder, MU_STREAM_READ);
mu_folder_list (folder, dir, "*", 5, &list);
and obtain a list of all folders under dir up to fifth nesting level!
If one is careful enough (or, if one knows pretty well what he/she is doing, which is
the same thing, anyway), one may write:
mu_folder_list (folder, dir, "*", 0, &list);
0 meaning infinite nesting level, i.e. recurse untill you have
where to recurse.
Oh, well, I mustn't forget to tell Jocke about it! It was him who made me think about this folder business.
All in all, given all the recent changes to mailutils, I am inclined to think that the
next release version will not be 0.x, but 1.0:) I am pretty ready
to delay the release for a pair of months and to release a couple of alpha versions more,
to achieve the result.
Oh, by the way, now mailutils interfaces with GNU radius. Strange, I haven't thought about it earlier...
Still here
I have had neither time nor desire to write any articles within the recent three months. Sure enough, there were plenty of news during this time. I am still a bit short of time for a detailed description (maybe next time), but a can provide a very brief summary:
- Puszcza.gnu.org.ua, a central point for development, distribution and maintainance of software projects in gnu.org.ua domain, is up and running.
- Mailfromd, a mail filter, is reaching stable state. By this time it has been running long enough on my mail server without any problems. The latest addition to the filter is the ability to limit mail sending rate of a user.
- Lots of work done on the Mailutils project.
- My gallery can now speak several languages. Visit it soon to see new fotos (more on this subject later)
MIX
It was possible to write entire MIX in CWEB! Even including optab.c and lex.l!
However, I had to write a special post-processing program to handle
lex and yacc sources, created by ctangle.
Here it is.
Another good news: Dr.Knuth's home page already includes a link to MIX.
cflow
RMS has finally dubbed cflow a GNU package. I am now installing a repository on Savannah and working on other procedure issues (docs, web page, FSF directory entry etc.)
MIX language
There are quite some news in this respect. Firstly, I have prepared a patch to GNU MDK that fixes several incompatibilities between the language described by Dr.Knuth and the language accepted by MDK itself. These are:
- Use of
w-expressionsin literals, e.g.LDA =8(1:1)=, which is not accepted bymixasm. - Use of traditional
ALFdeclarations, i.e. the ones without quotes, as used in TAOCP.
José has agreed to include the patch into the future version of MDK
I have also returned to work on Douglas Laing MIX package. Douglas has kindly given me his permission to distribute the sources under GPL and has informed Dr.Knuth about the new package.
Why work on another MIX assembler/simulator when MDK is available? Well, there are quite a few reasons of doing so. While being a nice package, MDK does not quite satisfy my needs. What I want is a MIX assembler/simulator as closely conforming to TAOCP as is possible. Douglas's MIX meets this requirement, especially after I added back TTY device (by the way, I'm looking for a name for the new package, Conformant MIX seems to be quite a good choice).
Secondly, any MIX package is meant first of all for those who are studying TAOCP and are experimenting with the programs from its examples and excercises. This audience will certainly welcome a debugging feature. I have implemented MIX terminal mode, which, apart from remembering me IBM 360 console of the good ol' times, allows to debug MIX programs.
Another thing, given its special audience, a MIX package should be extremely educational itself. Again, MIX fits this description quite well. Its simulator is initially written closely following the guidelines set forth in TAOCP itself. Besides, it is written in WEB. And this brings me to the third objective of the package:
I want to rewrite the entire package in WEB. The primary motivation
is explained above: it is to make sources well-documented and educational to
the very extreme. There is a secondary motivation as well: I want to explore
the limits of usability of CWEB tools, by pushing them to the
very edge. At the risk of being accused of heresy, I must admit I doubt
whether they could effectively be used for a real-world programming. Writing
in literate programming style requires one to switch attention between
TEX subtleties and writing good code, which is a
difficult task (the new
CWEB major mode for Emacs might help in this regard, though) and does not
improve productivity. Besides I do not like much the way
cweave formats large C data (e.g. arrays of structures). It is
simply awful. So the purpose is to explore all pros et contras of
CWEB tools.
The majority of MIX sources are rewritten in WEB. I have even
managed to produce a valid YACC source file from a .w source
(see mixal.w)!
The only two sources left are lex.l, which is downright
impossible to write in WEB, and automatically-generated optab.c,
which, being processed by cweave, looks like a pile of ..., well,
garbage.
Trying to make my best to handle these, too...
Oh, well, and last but not the least: the package will provide a MIX simulator written entirely in Elisp. There exists a preliminary implementation already.
Apout
I have published my modifications to Warren Toomey's apout package. The modifications permit to run all programs from the earliest UNIX binaries found so far: so called 1972_stuff, binaries dated 1973, discovered by Dennis Ritchie.
Here is my message to Warren describing the details. It is interesting to notice the date, by the way.
Other things
Have you ever tried to download, compile and install a dozen and a half aspell dictionaries on one machine? If you ever need it, use this script.
"Potykaniem dobrym potykałem się, wiaręm zachował, zawodum dokonał. Na koniec przyznaczon mi jest wieniec sprawiedliwości."
Papież Jan Paweł II, wielki syn Narodu Polskiego, odszedł od nas. Cześć Jego pamięci.
Cflow
There is also another good news, apart from the equinox. I have resurrected
cflow project.
It was initially written in 1997-1999 and fell into oblivion shortly
afterwards. Somehow, I got distracted by other things... Now, a recent
thread in gnu-devel mailing list has shown that there is a
demand for this kind of program and this made me remember my past attemtps.
So I have (quite happily) resurrected the package. During this week I have
managed to turn it into GNU-compatible project. I have also sent a
registration request to RMS.
The question is: where was my brain during these seven years? Another question is: how many useful programs still lie buried in my archives?
The program is compatible with POSIX specs and offers quite
a number of improvements (of course it will offer more still:). Here is
a sample output tree
describing the project itself. The tree was obtained using chart.cflow
rule in src/Makefile.am.
|
Nunc est bibendum! |
Simultaneous access to mailboxes
Imagine the following synopsis: your imap4d daemon is working
with a mailbox. Part of its data is cached into memory, any modifications to
the mailbox are not flushed to disk until user explicitely requires it.
Now, the same user launches another mail client that opens the same mailbox, deletes some messages, and closes it.
The user makes some modifications to the mailbox in imap4d,
requests EXPUNGE and closes the mailbox. Imap4d
performs flush using the data cached in memory and, voilà - the mailbox
is trashed.
You'd say the obvious solution is to lock the mailbox while it is being
operating upon. But no, that won't work for imap4d, because
appending to the mailbox is quite normal, and it should be allowed.
Locking the mailbox will cause mail delivery to be blocked during the client's
session (and as a sysadmin, I may say that the number of users that keep
their imap session open for 24 hours a day is surprisingly big!)
Of course, the mailbox must be locked while it is being written to, and we do this, but that's another story.
In GNU mailutils
we use a function called mailbox_is_updated to determine whether
the mailbox was modified recently. The function returns 0 if
it was modified and 1 otherwise. For plain UNIX
mailboxes a simple approach is used: the function checks if the size of the
mailbox file has changed.
It is assumed that if it the new size is greater than previously recorded one, than some new message were appended to the mailbox. If the size is less than the recorded one, then, well... see the quote at the start of this article :)
The method is week since:
- The mailbox can be modified without changing its size (well, yes, it's rather rare, but nevertheless possible);
- Size growth may be produced by editing some message(s) in the middle of the mailbox.
Both cases will result in mailbox corruption.
And finally, the case of mailbox size shrinkage was still not handled in
imap4d. Still, because the issue has quite long history:
it dates back to April of 2001, when I first joined the Mailutils team.
Here is a short historical essay on the subject:
- 21 Apr 2001
-
I noticed that
pop3dbroke on simultaneous accesses to the mailbox. The story withpop3dis quite different, since it does use mailbox locking (well, that's to say now. Back then it still did not...), anyways:... what seems to be a real problem is simultaneous access to the maildrop. All locking/unlocking works just fine, but I have come across the following situation: two sessions access the same mailbox simultaneously, both do LIST, then one of them does DELE on some message, then QUIT. The remaining session does a RETR and dies miserably, since its internal indices are already out of sync with the real maildrop contents. The comment on mbox_is_updated() function addresses this but the function itself is never called. So I added a call to mailbox_is_updated() to the pop3_mainloop() function just before the processing of a keyword. Also I have added ERR_MBOX_SYNC define to help handle the situation when mbox_is_updated() bails out. After these changes, the second session just gets the message -ERR Mailbox updated by other party or corrupt and the connection is closed. This behaviour seems to be compatible with RFC, but maybe it would be better to deny simultaneous accesses altogether? - 23 Apr 2001
Alain agreed to the proposed solution.
- 30 May 2001
Nice comment on a correctness of the name
mailbox_is_updated. It raised a small discussion (see my next posting and Dawe's answer to it), but did not lead to renaming the function :)As a side note, the story of linguistic inventions in
bug-mailutilslist is quite amusing... I certainly should catalogue them :^)- 10 Nov 2001
-
In course of an unrelated discussion, Alain reminds that
We are trying to be smart by guessing that if the newsize is larger, it is because a new mail was ___APPENDED___ to the mailbox so the offsets maintained by the mailbox_t will still be sane and mailbox_expunge () will do the right thing (i.e. seeing that they was new mail when doing the ftruncate())
- 13 Mar 2002
-
An unrelated issue, but still worth mentioning: on some machines disabling
mmapspeeds uppop3d. Rationale:mailbox_is_updatedindirectly callsmsyncwhich makes the daemon spend quite some time in uninterruptible sleep. - 16 Feb 2005
-
After a four-year delay I have added to
imap4dsupport similar to that ofpop3d.
The approach used by imap4d is a bit different from what
we use in pop3d. Essentially, upon selecting a mailbox imap4d does the following:
- Install the
MU_EVT_MAILBOX_CORRUPThandler. The handler raisesmailbox_corruptflag when the event is generated. - Before processing the new command, call
imap4d_sync. This function callsmailbox_is_updatedand issues RFC2060 untagged responses if the mailbox was modified.Imap4dalways did this. The essential change is the following. - If the mailbox was modified and
mailbox_corruptis set, close the mailbox and open in again. This discards all cached data and reads the new mailbox contents.
The drawback of this approach is that all modifications to the mailbox the user might have made during the imap4 session are discarded. In my opinion it is a reasonable price for preserving the mailbox contents. However, this issue can be addressed too. More on this later.
While solving mailbox shrink problem, the method does not solve
the described above weaknesses
of mailbox_is_updated.
Correct Diagnosis is 50% of Treatment
To actually solve the issue mailbox_is_updated must be
able to tell that the mailbox was modified, and how exactly it was modified,
independently of its size. Unfortunately this is easier said than done.
Currently mailutils is able to handle various mailbox formats
and the way to do the proper diagnosis will vary with the format.
Let's first see what can be done for plain UNIX mailboxes.
Obviously, mailbox_is_updated must first check
mtime of the mailbox file. If it did not change, the function can return
1 immediately. Otherwise, it should assume some changes
were done to the mailbox. Now, the question is whether these changes
affect the cached data. The code in
mailbox/mbox/mbox.c keeps offsets of UNIX 'From '
lines in the mailbox file. It will suffice to compare these with real offsets
to decide whether the mailbox was modified (in the terms of
libmailutils corrupted) or a new message was added to it.
If any of the registered offsets differ, we scream bloody murder and
raise MU_EVT_MAILBOX_CORRUPT event1) . In any case,
we return 0 indicating that the mailbox has been changed.
A similar approach could be used for other mailbox formats.
As a side note, we could also prevent undesirable modifications of
the plain UNIX mailbox if we apply kernel exclusive lock on
the file from offset 0 up to its current size...
1) It may also be reasonable to invalidate all cached data in this case
EiFUB, which means "Everything is Fucked Up Badly".
Sorry about the language...
Ukrainian translation for www.gnu.org
Evgeniy Sudyr translated the main GNU site to Ukrainian. Of course it is now the default for www.gnu.org.ua.
Anubis MDA
I have implemented new MDA mode for Anubis. In this mode, it acts as a mail delivery agent, receiving incoming mail from the standard input, processing it and piping modified message to the real local mailer.
Two command line options must be specified in this mode: --mode=mda, telling Anubis that it should operate in MDA mode, and
--local-mta, specifying the local mailer to use when actually
delivering the message.
In my sendmail.cf I have:
Mlocal, P=/usr/local/sbin/anubis,
F=lsDFMAw5:/|@@qSPfhn9,
S=EnvFromL/HdrFromL, R=EnvToL/HdrToL,
T=DNS/RFC822/X-Unix,
A=mail --mode=mda \
-l '/usr/local/libexec/mail.local -f %sender %recipient' $u
This allows me to first process incoming mail through Anubis and then
through Sieve (invoked by mail.local)!
Several things are worth mentioning since the beginning of this year:
First, I have finally joined Ukrainian translation team. Fortunately, it did not require any paperwork as our usual disclamer by default covers any other language teams one may want to join. Would it be so with our GNU disclamer as well! I hate waiting for a snail-mail to arrive from Boston to me and for my reply to reach Boston again only in order for my 25-line patch to Emacs being finally applied to CVS (by the way it is a real case, Ted have sent it almost a month ago and I'm still waiting for it to arrive, and the patch to rmail is still waiting in the queue, although everybody knows how many assignments I have already made to GNU project... I wonder why would not RMS create a new assignment form for this and any other project whatsoever I may wish to join or create within GNU or (whatever else) in the future).
I've started to rant, it seems... Too bad.
Secondly, Mailutils finally has vacation extension action in Sieve. To be precise,
we already had it as an extension to Scheme implementation of Sieve. I lacked time (or was too lazy?) to do the
same for our Sieve library until Felix Egli sent us his version which didn't
quite match our standards and was incompatible with the existed one, so I
decided to finally write it:) Massive thanks, Felix!
Oh, yes, and the mess with diagnostic messages is fixed, too.
Another news in Mailutils is ODBC SQL driver, which actually means that from now on Mailutils is able to interact with virtually any existing DBMS (since any serious DBMS has an ODBC interface).
As usual most of the time is taking tar. After 1.15.1 release I have started a major rewrite of buffer handling and incremental archive parts.
Several fixes were applied to Anubis as well. Recent letters from Paolo made me finally gather my wits and set forth a draft describing the proposed method of handling multi-part messages.
This, in its turn, forced me to finally attack and solve the problem of using gendocs.sh script to generate web documentation in our projects. The resulting Makefile.am is very elegant. However, this patch must be applied to the script in order to use it. I'll submit the patch upstream tomorrow.
Take a look at the resulting manual page.
The only thing left with this approach is the absence of per-chapter
html output, which I am going to fix shortly (it will require
sending a new assignment form to Boston. At the end, I think, I'd better send
quite a bunch of them beforehand).
Several things have happened recently:
- A courageous decision of the Polish Government prevented European Union from adopting a disastrous "Software Patent Directive"
- Re-elections in Ukraine. Let's wait for the results...
- A bunch of christmas releases: Anubis 4.0, tar 1.15.1, cpio 2.6 and mailutils 0.6
I have been chasing for bugs in gsasl 0.2.2 for over four
hours. Managed to find quite a few. Debugging is probably the most
exhaustive kind of work I've ever tried...
Emacs folks have begun arguing about GFDL vs. GPL problem
(though, frankly speaking I can't see any problem at all). Debian
people evidently become tired of it and their discussion on this topic
has faded away. Now it's emacs-devel turn, isn't it?
Interestingly, how similar both threads are: the two sides go on spitting
different reasons and no one seems to have heard the other, whereas RMS
keeps olympic silence and only when really annoyed does he tell: "I
believe GFDL does what it should". So spricht Zaratustra...
Items from my museum
An /etc/issue made by a friend of mine for one of my machines.
It is dated some time around 1999
/^\
-==#########==-
____/~^~\_____
////|||||||\\\\\
|\---.______.---/|
| _ . - ...- . |
| ##### ./~\. . |
|. # @ = \_/. . |
| #, # __ . - |
|. # = . -- . |
|_ ##### .. - |
\\\\||||||||////
T~~~T~~~~~~T
@ @ @
|~~~\ /~~ |~~~\ /~~ | /~~~\ ~~~T~~~ ~~~~~/
| | | | | | | / \ | /
|___/ |-- |___/ |-- | | | | /
| | | | | |-----| | /
| \__ | \__ \___ | | | /_____
I baptized the machine pepelatz (a term from Georgi Daneliya's film Kin-Dza-Dza). Wander what's this? Here's the definition:
Excerpts from "The Technical Dictionary of Cuue", Prentice-Hall, 5255:
pepelatz, n: Flying apparatus (usually very rusty) used in conjunction with gravitzapa (see).
gravitzapa, n: An indispensable part of pepelatz (see).
I can only add that the machine looked almost exactly as its prototype :)
Back again
After a more-than-busy two-week pause I'm back again (I'd better tell some other time what I've been doing during these two weeks). Most important news during this time are: together with Max we have set up our server (Ulysses) and I've finally managed to mirror both ftp.gnu.org and www.gnu.org. Moreover, both mirrors are now accessible as ftp.gnu.org.ua and www.gnu.org.ua.
Another mirror I've been runnng, that of the Unix Heritage Society at tuhs.org.ua, is now hosted on this server too.
Needless to say that my personal page is served by Ulysses as well.
The question now is, how much will it cost to maintain all this, given its average daily traffic... We'll see...
Other FS news: a simple script to view po files. Why? I don't know. May prove
useful some day... Click here to see
it work.
Hacked on GNU mailutils and introduced a universal sql-access layer. The auth library has been rewritten accordingly and mail.local is finally able to retrieve mailbox quotas from SQL database, a feature many of the mailutils users have constantly pinged me about.
While feedling with mailutils I've noticed something that makes me feel
a bit uncomfortable: we have no convention on how to write diagnostic messages.
Some of them begin with a capital letter, some don't. Some end with a period,
some don't. A chaos. We should certainly change it, but I'd better do it
after releasing 0.5.1 maintenance release (this change will affect
po files, and hence will require waiting for the translators to
finish their jobs).
Anubis: a couple of security-related changes proposed by
Ulf Härnhammar. Socks.c still waiting to be rewised by Wojtek.
Oh, yes, forgotten to say: among various junk on my machine I've excavated my geek code. Its surprising how little has changed since I wrote it...
Updated versions of rmail.el: modified source and diff file (against the latest CVS version 1.393).
ChangeLog entry:
* mail/rmail.el: Updated to work with movemail from GNU Mailutils (rmail-pop-password,rmail-pop-password-required): Moved to rmail-obsolete group. (rmail-set-pop-password): Renamed to rmail-set-remote-password. All callers updated. (rmail-get-pop-password): Renamed to rmail-get-remote-password. Take an argument specifying whether it is POP or IMAP mailbox we are using. All callers updated. (rmail-pop-password-error): Renamed to rmail-remote-password-error. Added mailutils-specific error message. (rmail-movemail-search-path) (rmail-movemail-variant-in-use): New variables. (rmail-remote-password,rmail-remote-password-required): New customization variables. (rmail-probe,rmail-autodetect,rmail-movemail-variant-p): New functions (rmail-parse-url): New function. (rmail-get-new-mail): Updated for use with GNU mailutils movemail. Accept mailbox URLs no matter what flavor of movemail is being used. * etc/NEWS: Document changes to rmail.el * man/rmail.texi: Likewise
Yesterday I released version 1.3 of GNU Radius. I wish Jordi updated Catalan localization. It was very important to me. Pity...
More work on rmail.el. People from emacs-devel
have supplied some fresh ideas and RMS have asked me to update documentation
as well:
السّلام عليكم
Well, my log got interrupted for more than two weeks... I have started to learn Arabic, and it is taking now the rest of my time, which was in short supply already. I am growing more and more fascinated by both Arabic script and its grammar...
The long silence does not mean nothing was being done. So, a short summary:
- GNU Radius 1.3 is ready for the release. The current snapshot is marked 1.2.96 and is as usual available from mirddin.farlep.net. I am waiting for Jordi to finish Catalan translation, that's the only thing missing.
- Several bugfixes and improvements have accumulated in GNU mailutils which makes me plan to release a maintenance version next week. See NEWS file for a short description of these.
- I have submitted a hacked version of
rmail.elto emacs-devel. This version makes extensive use of the new features provided by GNU mailutilsmovemailprogram. Both modified source and diff file against the latest CVS version 1.393 is available. - Finally, Wojtek says it's less than a month left before releasing GNU Anubis 4.0.
Fatally short of time...
The new radius documentation is available.
The main page is now xhtml 1.0 (as well as
radius homepage)1) .
I wish I would be able to convert documentation files to xhtml as well,
but that would require either updating texi2html (I wouldn't like
to do this) or texinfo (I'd love to, should the time permit)...
Anyway, the package itself is ready for the release. Today I have fixed a
small bug that manifested itself on BSD systems, and have given
a final polish to the docs. I'm going to release the stuff before Nov 06.
1) By the way, I'm working on the xmltools translator for producing standard GNU web pages (working name boilerplate).
html (sic!) wygląda to tak:
<hr>
<center>
[
<?guile
(let ((env (current-image-neighbors)))
(if (car env)
(begin
(display "<a href=\"")
(display (image-url (gallery-id) (car env)))
(display "\">")
(display "Poprzedne zdjęcie")
(display "</a> | ")))
(if (cdr env)
(begin
(display "<a href=\"")
(display (image-url (gallery-id) (cdr env)))
(display "\">")
(display "Następne zdjęcie")
(display "</a> | "))))
?>
Już jasne do czego zmierzam, co? No właśnie, chcę zmodyfikowac
mod_guile tak,
by Apache rozumial <?guile ... ?> na równi z
<?php ... ?> :))
Dictionary support is ready
Dictionary of Ellinika site
has been completely rewritten in XML (see this entry for more info). The project now uses
gamma instead
of guile-sql + quile-texinfo.
But seek the road which makes death a fulfillment.
Dictionary structure
I have started to rewrite dictionaries in Ellinika project. The idea is
to use XML instead of the definition language I have been
using so far. The latter was designed to be simple, short (I hate to
type) and suitable for describing dictionary entries. Its parser
is written in C and is therefore fairly fast. Presently,
the dictionary
created with it contains 1150 entries, and the process of its creation
has confirmed that the dictionary structure is right and
input language generally suitable for the purpose. However, it has also
exposed some drawbacks of the language.
The principal drawback is that currently a dictionary entry is supposed to contain only one part of speech 1) , i.e. currently assumed entry structure is:
(key part-of-speech articles)However, there exist words that pertain to several parts of speech simultaneously, and that change their meaning according to the part of speech. For example, κρυώνω, when used as a transitive verb, means to refrigerate, whereas being used as an intransitive verb it means to feel cold, to freeze. The number of such words (verbs in particular) in Greek is fairly large.
So, I have decided to redesign the input language, but instead of
simply fixing the already existing language, I've chosen to fully write
the dictionary sources in XML.
External representation
In the new definition language each entry is represented as follows:
<NODE> <K>string</K>+ [<F>string</F>] <P ID="string"> <M>string</M>+ <A>string</A>* <X>string</X>* <T ID="string" />* <X>string</X>* </P>+ <X>string</X>* </NODE>
(as usual, optional elements are inclosed in brackets, * means
zero or more occurrences of the element, and + means one
or more occurrences of the element).
Elements have the following meaning:
NODE- Start the definition of a dictionary entry
K- Introduces the dictionary key, i.e. the word of the source language that is explained by this entry. There may be several keys if the notion in question has several sinonyms.
F- Introduces grammatic forms of the key, whenever these are not formed by standard rules. In future I expect to write proper verb conjugator, then this field will probably mark a reference to or invocation of it.
P- Part of speech and meanings associated with it (see below). Attribute
IDintroduces the name (usually abbreviated) of the part of speech. M- Translation of the word (
Mstands for Meaning) A- Antonym
X- Cross-reference for this entry. Usually this is a reference to sinonym or some semantically related key.
T- Topic or group this entry pertains to.
IDidentifies the topic. When many entries pertain to the same topic, their definitions can be enclosed in<T ID="name"> ... </T>
construct.
There are two special forms of this notation. One is useful as a shortcut for those words that have only one part of speech (as I said I hate to type, so I'm trying to spare as much typing as possible):
<NODE> <K>string</K>+ [<F>string</F>] <P>string</P> <M>string</M>* <A>string</A>* <X>string</X>* <T ID="string" />* </NODE>
Another one introduces an entry that is a reference to another entry in the dictionary:
<NODE> <K>string</K>+ [<F>string</F>] <P>string</P> <X>string</X>* <T ID="string" />* </NODE>
This is useful for such pairs as "ο ποταμός" and "το ποτάμι", both meaning
"river" but having different genders. The special form
<X /> means reference to the immediately preceeding node
definition wich has at least one translation (M element).
Examples
A working example can be found here.
Internal representation
The initial version of the dictionary translator is already available. See its heading comment for the short
description of the internal representation (Scheme of course).
1) The term part of speech is used here in broader meaning: e.g. for the dictionary purposes transitive verbs and intransitive verbs are regarded as different parts of speech. I'll possibly have to introduce finer granularity here (e.g. part-of-speech/subpart or something similar), but currently I am not sure it will be worth the effort.
News in argp module
(did I say I am maintaining it? Well, so I am, since the day before yesterday)
I've fixed a nasty coredump that occurred if the option name of an
OPTION_DOC was set to NULL. Besides, updated
argp will never attempt to translate an empty help string.
And finally, new option OPTION_NO_TRANS prohibits translating
name field of an OPTION_DOC option. The latter
is already used by tar.
Well, it took four days to entirely rewrite lingua in Scheme
using xmltools.
Now it allows much greater flexibility than eXtrans version did.
Moreover, it is easily extensible. There are still some minor points to
work out, but as a whole xmltools+lingua is quite mature now,
uhmm..., except for the docs... I'll need some time to write them.
Then I'll probably host the project on Gna!.
In the meanwhile I have already rewritten
ellinika using the new stuff. It allowed me to use normal
Makefiles, split the single source file into several smaller
ones and do
a lot of cool things I couldn't have dreamed of using eXtrans
version.
LINGUA project
I had a bit of free time, so I've used it to polish LINGUA engine.
Currently it is written using eXtrans
, which, albeit a great program, is not flexible enough for my needs.
In addition to already described problems,
its handling of nested tags is not consistent.
Surely I could have modified it further, but it appeared to me that I'd be better off writing a replacement for it from the scratch. And of course I was going to write it in Scheme :)
So, I've started a new project under a working name xmltools. It is a collection of Guile modules that should
provide the functionality similar to that of eXtrans yet
largely extended and improved. The project uses expat library and Mixp - a Guile interface module to expat.
In its current state, xmltools already supply all of
eXtrans functionality, including postprocessor support.
Today I have written basic part of lingua.scm. The good thing
is, it is already able to process xml and produce valid html output!
Hopefully it won't be long before I rewrite LINGUA entirely in
Scheme.
New releases
GNU Radius 1.2.95 and Anubis 3.9.96 are available.
Chasing for bugs...
There are two very interesting ones:
Anubis
First is in Anubis. When running Anubis test suite inauthmode,
Wojciech noticed that some daemon instances enter endless loop
attempting to free a chunk of memory.
My further investigation has shown that it always occurred when trying to
free an ASN1 node belonging to _gnutls_pkix1_asn tree. The
bug manifests the following regularities:
- With
MALLOC_CHECK_unset, it is almost certain to appear in every test suite run. - With
MALLOC_CHECK_=2the bug never appears. I find it extremely uncommon, even taking into account Murphy's law. I suspect it to be a very important issue, although at the moment I cannot say why. - Using
mallocby Doug Lea ($Id: malloc.c,v 1.11.2.8 1998/08/28 12:06:46 drepper Exp $), the exact location of the dead loop is infrontlinkmacro, namely:else { /* This loop is endless. Obviously the memory chain is corrupted */ while (FD != BK && S < chunksize(FD)) FD = FD->fd; BK = FD->bk; }(invoked from
chunk_free()near line 2965).
It seems like a heap corruption, the two basic questions are: why
it is not revealed at an earlier stage by malloc
debugging code, and why enabling this same debugging code makes the
bug disappear? It will take a while to answer these questions...
Radius
Yep, the second one is there. It manifests itself as an incorrect
comparison of two struct timeval. More precisely,
in the following snippet:
gettimeofday(&now, NULL);
timersub(&now, start, &diff);
if (timercmp(&diff, tval, <)) {
...
timercmp incorrectly returns false when
now differs from start by several milliseconds
(the actual order of magnitude of tval is several seconds).
The bad thing about it is that both timersub and
timercmp come from standard glibc headers...
News
Paxutils' project page is updated.
Antinews
Paxutils' official page at http://www.gnu.org/software/paxutils is still unavailable, despite the fact that I have uploaded an updated version two days ago. E-mails to Savannah hackers and GNU webmasters have so far given null effect. In fact, they remained unanswered.
For the time being, I have to host paxutils page on my server.
I'm quite accustomed to various delays, but frankly, sometimes I'm getting bored...
Good reading
The Ancient Scripts site is fantastic.
A very good introduction to Korean language.
Today I started the second year of learning Greek in Ίδρυμα Ελληνικού Πολιτισμού.
Radius
I have released radius 1.2.94. Hopefully it won't be long before the release of 1.3.
Cpio
Version 2.5.90 of cpio is available for download from alpha.gnu.org. This is the first version of GNU cpio with official
NLS support.
Working on GNU Anubis. Our current deadline is tomorrow.
cpio + tar + pax = paxutils
Three commits in a day are definitely too much...
The festivities are over, and I'm back to work on free software.
After more than half a year delay (!!!), Savannah people have approved
paxutils. The project seems to have bad karma...
Anyway, since I've just released tar 1.14.90 and the
version 2.5.90 of cpio is ready and working, I've started
merging the two projects into paxutils. The road will be long.
I am going to export as much of the good ideas and as little of the
codebase from each package as possible.
If everything goes as expected, the first version of
paxutils should be ready by the January. If, on the contrary,
the things continue going from bad to worst as they have been during all
this year... well, then I'll make it by the beginning of March.
Το μνημείο της Φιλική Εταιρείας στην Οδησσό
Έχω παρευριθεί στα αποκαλυπτήρια του μνημείου των θεμελιωτών της Φιλική Εταιρείας στην Οδησσό. Ωραίο μνημείο και ωραίο θέαμα. Περιμένω με ανυπομονησία την αρχή του διδακτικού έτους στο Ίδρυμα Ελληνικού Πολιτισμού!
Today I attended the opening of the monument to the founders of Φιλική Εταιρείας near the Foundation for the Greek Culture in Odessa. Nice monument! The opening was dedicated to the 210th anniversary of the city and 10th anniversary of the Foundation. The programme of the celebrations is quite long and interesting. More info and photos in the future logs!
GNU tar 1.14.90 released
As the version number implies, it is an alpha. Complete list of user-visible changes follows:
* When restoring incremental dumps, --one-file-system option prevents directory hierarchies residing on different devices from being purged. With the previous versions of tar it was dangerous to create incremental dumps with --one-file-system option, since they would recursively remove mount points when restoring from the back up. This change fixes the bug. * Renamed --strip-path to --strip-components for consistency with the GNU convention. * Skipping archive members is sped up if the archive media supports seeks. * Restore script starts restoring only if it is given --all (-a) option, or some patterns. This is to prevent accidental restores. * `tar --verify' prints a warning if during archive creation some of the file names had their prefixes stripped off. * New configure option --with-rmt allows to specify full path name to the `rmt' utility. This supercedes DEFAULT_RMT_COMMAND variable introduced in version 1.14 * New configure variable DEFAULT_RMT_DIR allows to specify the directory where to install `rmt' utility. This is necessary since modifying --libexecdir as was suggested for version 1.14 produced a side effect: it also modified installation prefix for backup scripts (if --enable-backup-scripts was given). * Bugfixes: ** Fixed flow in recognizing files to be included in incremental dumps. ** Correctly recognize sparse archive members when used with -T option. ** GNU multivolume headers cannot store filenames longer than 100 characters. Do not allow multivolume archives to begin with such filenames. ** If a member with link count > 2 was stored in the archive twice, previous versions of tar were not able to extract it, since they were trying to link the file to itself, which always failed and lead to removing the already extracted copy. Preserve the first extracted copy in such cases. ** Restore script was passing improper argument to tar --listed option. ** Fixed verification of the created archives. ** Fixed unquoting of the file names containing backslash escapes (previous versions failed to recognize \a and \v).
|
Good news |
Welcome to my local CVS Repository. Today I was heavily hacking on tar. Lots of bugfixes and improvements. See ChangeLog entry for more info. |
Bad news |
|
| Summer is over :(( | |
Nowe zdjęcia. A oto kod który je wyświetla: webgal.cgi.
JPEG).
Oto pierwsze z nich:
Kijów. Andrzejewski zjazd. "Zamek Ryszarda". Okolo 8:00
Musiałem przypomnieć sobie kurs astronomii by obliczyć kiedy słońce będzie w potrzebnym miejscu :^)
Zamkiem Ryszarda nazwał ten gmach wybitny rosyjski pisarz Wiktor Niekrasow (podobno na cześć Ryszarda I "Lwie Serce", z ktorym oczywiście ten gmach aż nijak nie jest związany). O gmachu mówiono dziwne rzeczy, głównie z powodu tego że, jak powiadają mieszkańcy, jego kominy wydają nocą dziwne dzwięki. Swego czasu w "zamku" mieszkało wielu pisarzy i malarzy.
Takie oto ponure spostrzeżenie...
Hackowałem blogRight-a. Wynikiem jest ta strona.
Chávez guanyà! Estic molt content.
El dia de avui es, potser, decisiu per als veneçolans: es celebra el referèndum revocatori... Fa més de un any que no tinc novetats de Oswaldo i Francisco. Com estaran?
He millorat el diccionari de Quechua una mica. Llavors em torno a tocar quena amb la consciència tranquil·la.
Implemented Anubis Dixie testsuite following the
guidelines set forth yesterday.
Nothing more to say. Playing music...
Coca no es cocaina. Coca es la hoja sagrada.
Jallalla Bolivia, jallalla Oruro,
Soy de los cocanis alma, vida y corazon.
-- Savia Andina
Runasimi
Added chapters about
ordinal and
monetary numerals.
Anubis authmode testsuite
Overview
The testsuite driver starts anubis daemon in
authmode as follows:
anubis --norc --relax-perm-check --altrc target.rc
where target.rc is the full filename to the configuration file for this instance of the program. It contents is described in detail in the next section.
Now, anubis switches to the daemon mode. Theoretically,
we could have used DejaGNU's remote.exp to talk to
the daemon. However, DejaGNU is not able
to handle TLS encryption, so this method does not suite
our needs.
Instead we launch a second copy of anubis, but this
time using the following command line:
anubis -Dfi --norc --relax-perm-check --altrc interface.rc
This instance of the program remains in foreground and
DejaGNU talks to it using already existing
anubis.exp module. Moreover, all the
testcases can be run without modifications.
The following diagram illustrates data flow between main testsuite
program and anubis daemon.
Configuration files
As usual, both target and interface configuration files are
created from their corresponding *.in source files.
The purpose of this step is to expand variables TESTDIR and
TOP_SRCDIR, thereby providing correct paths to data and
binary files. Usually this is done on compilation time by testsuite/etc/Makefile.am. However, to
launch the first (authmode) instance of
anubis we need to know the port number to bind to. Using
any predefined port number is not a good idea, as it may be in use
at the time the testsuite is run. Prompting the user to supply the
port number is even worst.
The solution is to select the first available port number among
TCP port range 1025-65535. For this purpose we
use findport.c
from the GNU Radius package.
The corresponding part of DejaGNU source will look like:
# Prepare a sed expression:
set sed_expr [remote_exec host "$FINDPORT -c1 -s1025 -f's^@AUTH_PORT@^%d^;'"]
append sed_expr "s^TESTDIR^[board_info $host_board srcdir]^;"
append sed_expr "s^TOP_SRCDIR^[board_info $host_board top_srcdir]^"
# Create target configuration file
set output [remote_exec host \
"sed -e '$sed_expr' \
[board_info $host_board top_srcdir]/testsuite/etc/target.in"]
save_to_file "[board_info $host_board srcdir]/etc/target.rc" $output
... Run 'anubis --altrc target.rc' here ...
# Create interface configuration file
set output [remote_exec host \
"sed -e '$sed_expr' \
[board_info $host_board top_srcdir]/testsuite/etc/interface.in"]
save_to_file "[board_info $host_board srcdir]/etc/interface.rc" $output
It is supposed that save_to_file writes to the file
whose name is given in its first argument the lines from the list
given as its second argument.
The amount of time elapsed between creation of the target
configuration file and launching first anubis instance
should be as small as possible, in order to diminish the probability of
some other process occupying the port number retuned by
findport. So, it is preferable to start first
anubis instance right after creating configuration
file for it.
Theoretically, it is still possible that by the time first
anubis starts up the port number will become occupied.
This will cause the testsuite to fail, so we should make sure
an appropriate diagnostic message will be issued.
However, the probability of such failure is quite small. I have been using this approach in GNU Radius testsuite for more than four years and I cannot remember ever having encountered such a situation.
Given all the above, let's now see what should the configuration files contain.
Target configuration
file, target.in
BEGIN CONTROL
mode auth
bind @ANUBIS_PORT@
local-mta TESTDIR/mta -bs -d TESTDIR/etc/mta.log \
-c TOP_SRCDIR/testsuite/data/anubis.pem \
-k TOP_SRCDIR/testsuite/data/anubis.pem
logfile TESTDIR/etc/anubis.log
ssl yes
ssl-key TOP_SRCDIR/testsuite/data/anubis.pem
ssl-cert TOP_SRCDIR/testsuite/data/anubis.pem
END
BEGIN AUTH
sasl-password-db text://TOP_SRCDIR/testsuite/data/anubis.textdb
sasl-allowed-mech CRAM-MD5 DIGEST-MD5
# Err, a practical joke:
smtp-greeting-message "Hej, sloneczko"
smtp-help-message "Czlowieku, dopomoz sobie sam!"
END
Interface configuration file, interface.in
BEGIN CONTROL
logfile TESTDIR/etc/anubis.log
remote-mta localhost:@ANUBIS_PORT@
ssl-oneway yes
esmtp-auth anubis:guessme
END
Testing
To be continued...
Runasimi news
Added chapter about cardinal numerals in Quechua.eXtrans
WritingLINGUA engine was a great experience and it has
shown that eXtrans is a nice idea. It has, however, some
deficiences. Some of them were already fixed (I hope to make CVS
repository available soon). The two most important ones remain:
- Rudimentary error checking and reporting,
- Keeping its own database of target-source file dependencies.
The diagnostics does not help to find out the exact place in the
XML file where the error occurred. Its an awful work to
scan the entire source to find out a misplaced or mistyped tag.
I have made some improvements which do help in certain cases, but
the main part of work is still ahead.
Keeping a separate database of target-source file dependencies makes it
difficult to use eXtrans in makefiles. Both
Ellinika and
Runasimi use all-local
rule to override the difficulty, but the solution is far from being optimal.
I'd like to rewrite eXtrans so that it produces
usual makefiles instead of keeping its own database
of files to be modified.
An interesting approach would be to create a derivative class from
XTransBase which would override set_output
so that it would add appropriate output file name to the makefile
rule being generated. The rest of methods should probably simply call
pass and do nothing. At the end of processing this auxiliary
class would output the rules it has generated (and, possibly, purge orphan
html files).
Theoretically this should work.
The related makefile rule will then look like follows:
xtrans: $(EXTRANS) -M $(SOURCE) > .extrans.mk $(MAKE) -f .extrans.mk
Bugfixes
| mailutils | Coredumped on reading a single escape character. Wonder why no one has noticed this before! |
| tar | GNU multivolume cannot accept members with filenames longer than 100 characters to straddle the volume boundary. It did not check filename length, however. |
I have finally moved the runasimi site to LINGUA engine!
Back to tar. I hope to fix listed-incremental problem today.
Anubis news:
Committed a fix to the problem recently spotted by Wojtek: when switching to the user's privileges anubis did not clear the list of complementary groups.Tar news:
Luca Fibbi reported that version 1.14 incorrectly skipped members in aPAX archive. It turned out that it was incorrectly deeming
the members to be sparse, and that, in turn, due to the fact that the
member header was not decoded prior to calling skip_member().
Lots of interdependencies...
No coding today. Playing charango again:)
However, there are some news:
Mailutils news
The "error_t on Sparc" problem has been solved! It turned out that one of Guile includes definederror_t without defining symbol
__error_t_defined. It's easy to fix, but Guile people should have
known better than doing such things.
I have a strong feeling that back in the days when we were editing our code with ed (I still use it quite often, I must admit) our code contained less errors and was far more readable than today.
I have just finished cleaning up my buddy's code that was written on a 120-columns-per-line screen and contained quite a few copy-n-paste bugs. Sure, one can read a 120-chars single-line declaration. One can even read a whole 80-line screen of such declarations, but I strongly doubt whether one will really understand what he has read and be able to spot out the error. Especially when one has been looking at his screen for 20 straight hours, you know.
Software
My todo list is quite long (as usual), but I have a strong urge to play charango... Its strings will surely keep me away from the console today. Chores will wait. Vielleicht das nächste Mal:))Anubis news
Implemented XELO extension. XDATABASE EXAMINE now works using MD5 hashes, just as was proposed in the initial 'pixie-dixie' draft.Mailutils news
Lots of changes. Still cannot understand why compiling guimb/main.c fails at argp.h on Sparc. Hopefully Alex will be able to provide a preprocessor output file, this should solve the puzzle...
Awfully tired of writing docs!
QOTD:
Radius news:
- Finished documenting radtest. Fixed several inconsistencies as well.
- Documented radauth.
- New contributions in /contribs subdirectory: passwd_to_db from Gerald Coon, radsend (original name: 'simula.pl') from José García and passcvt from yours faithful.
Tar news:
Two updated localizations are available for 1.14: Dutch and Simplified Chinese.Mailutils news:
Fixed minor bug in 'include/mailutils/daemon.h'.
Started weblog.
Thanks Wojtek for an excellent piece of software!
Radius news:
- Radtest language has reached more or less mature status.
- The documentation draft for 1.2.94 is available
![[image]](https://gray.gnu.org.ua/old/logbook/graphics/poland_banner_r.png)
![[photo]](https://gray.gnu.org.ua/old/logbook/gallery/28.jpg)
![This is a link to this site's RSS channel [xml]](xml.png)