[Winpt-commits] r276 - in trunk: . Include MyGPGME Po Src
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Thu Dec 21 09:25:00 CET 2006
Author: twoaday
Date: 2006-12-21 09:24:59 +0100 (Thu, 21 Dec 2006)
New Revision: 276
Removed:
trunk/Include/wptCryptdisk.h
trunk/Src/wptCryptdisk.cpp
trunk/Src/wptCryptdiskSrv.cpp
Modified:
trunk/AUTHORS
trunk/MyGPGME/WARNING
trunk/NEWS
trunk/Po/ChangeLog
trunk/Po/LINGUAS
trunk/Src/ChangeLog
trunk/Src/Makefile.am
trunk/Src/wptKeyserver.cpp
trunk/TODO
trunk/configure.ac
Log:
Modified: trunk/AUTHORS
===================================================================
--- trunk/AUTHORS 2006-12-15 10:00:01 UTC (rev 275)
+++ trunk/AUTHORS 2006-12-21 08:24:59 UTC (rev 276)
@@ -23,19 +23,17 @@
wptTrayPop.cpp - Prasenjeet Dutta
wptNLS.cpp - Ulrich Drepper <ulrich at cygnus.com>
rmd160.c, random.c - Free Software Foundation <fsf at gnu.org>,
-rndw32.c - Peter Gutmann, Matt Thomlinson, Blake Coverett
sunlink.c - Matt Gauthier <elleron at yahoo.com>
-*** This code is currently UNUSED ***
-wptFileDisk.cpp - Brantén, Stefan Scherrer
-wptSecmem.cpp - John J. Kane <jkane89 at softhome.net>
-
Translators:
+Names marked with (*) are retired
+
+[Swedish] Daniel Nylander <po at danielnylander.se>
[Japanese] Davar Pishva <dpishva at andrew.cmu.edu>
[German] Timo Schulz <twoaday at freakmail.de>,
- Thomas Henlich <henlich at mmers1.mw.tu-dresden.de>
- Ralf Kreutzmann <ralf.kreutzmann at equipmente.de>
+ (*)Thomas Henlich <henlich at mmers1.mw.tu-dresden.de>
+ (*)Ralf Kreutzmann <ralf.kreutzmann at equipmente.de>
[Portuguese/Brazil] Eduardo S. Dobay <edudobay at gmail.com>
[Slovak] Martin Lukac <menorx at yahoo.com>
[French] Pascal Brochart <pbrochart at tuxfamily.org>
Deleted: trunk/Include/wptCryptdisk.h
===================================================================
--- trunk/Include/wptCryptdisk.h 2006-12-15 10:00:01 UTC (rev 275)
+++ trunk/Include/wptCryptdisk.h 2006-12-21 08:24:59 UTC (rev 276)
@@ -1,78 +0,0 @@
-/* wptCryptdisk.h
- * Copyright (C) 2004 Timo Schulz
- *
- * This file is part of WinPT.
- *
- * WinPT is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * WinPT is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with WinPT; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-#ifndef WPT_CRYPTDISK_H
-#define WPT_CRYPTDISK_H
-
-#define FILE_DEVICE_FILE_DISK 0x8000
-#define IOCTL_FILE_DISK_OPEN_FILE CTL_CODE(FILE_DEVICE_FILE_DISK, 0x800, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
-#define IOCTL_FILE_DISK_CLOSE_FILE CTL_CODE(FILE_DEVICE_FILE_DISK, 0x801, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
-#define IOCTL_FILE_DISK_QUERY_FILE CTL_CODE(FILE_DEVICE_FILE_DISK, 0x802, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-#define DISK_DEFSIZE 32 /*MB*/
-
-enum cmd_t {
- CMD_MOUNT =0,
- CMD_NEW =1,
- CMD_UMOUNT =2,
- CMD_UMOUNT2 =3,
-};
-
-struct private_ofi_s {
- INT forced;
- INT cmd;
- INT devnum;
- CHAR drvlet;
- LARGE_INTEGER filesize;
- BOOLEAN readonly;
- USHORT flen;
- UCHAR fname[MAX_PATH+1];
-};
-
-typedef struct _OPEN_FILE_INFORMATION {
- LARGE_INTEGER FileSize;
- BOOLEAN ReadOnly;
- USHORT FileNameLength;
- UCHAR FileName[1];
-} OPEN_FILE_INFORMATION, *POPEN_FILE_INFORMATION;
-
-struct mount_list_s {
- struct mount_list_s * next;
- char drive[8];
- LARGE_INTEGER size;
- int rdonly;
- int devnum;
- int ttl;
-};
-typedef struct mount_list_s * mount_list_t;
-
-
-/*-- wptCryptdisk.cpp --*/
-int cryptdisk_unmount (char drivelet, int forced);
-int cryptdisk_available (void);
-void cryptdisk_cleanup (void);
-int cryptdisk_serv_run (void);
-BOOL CALLBACK cryptdisk_mount_dlg_proc (HWND dlg, UINT msg, WPARAM wparam,
- LPARAM lparam);
-BOOL CALLBACK cryptdisk_umount_dlg_proc (HWND dlg, UINT msg, WPARAM wparam,
- LPARAM lparam);
-BOOL CALLBACK cryptdisk_new_dlg_proc (HWND dlg, UINT msg, WPARAM wparam,
- LPARAM lparam);
-
-#endif /* WPT_CRYPTDISK_H */
Modified: trunk/MyGPGME/WARNING
===================================================================
--- trunk/MyGPGME/WARNING 2006-12-15 10:00:01 UTC (rev 275)
+++ trunk/MyGPGME/WARNING 2006-12-21 08:24:59 UTC (rev 276)
@@ -1,3 +1,4 @@
+!!! READ THIS !!!
This folder is just used as a backup folder. The code won't
be actively maintained any longer. Kurt Fitzner still uses the
Modified: trunk/NEWS
===================================================================
--- trunk/NEWS 2006-12-15 10:00:01 UTC (rev 275)
+++ trunk/NEWS 2006-12-21 08:24:59 UTC (rev 276)
@@ -974,3 +974,8 @@
* Fix a BUG() problem when decrypt+verify does not find
a public key to verify the signature.
+
+Noteworthy changes in version 1.2.1 (200X-XX-XX)
+================================================
+
+* Updated translation: slovak, german
Modified: trunk/Po/ChangeLog
===================================================================
--- trunk/Po/ChangeLog 2006-12-15 10:00:01 UTC (rev 275)
+++ trunk/Po/ChangeLog 2006-12-21 08:24:59 UTC (rev 276)
@@ -1,3 +1,8 @@
+2006-12-21 Timo Schulz <twoaday at freakmail.de>
+
+ * sk.po: Updated by Martin Lukac.
+ * LINGUAS: Add this language.
+
2006-12-15 Timo Schulz <twoaday at freakmail.de>
* sv.po: New Swedish translation by Daniel Nylander.
Modified: trunk/Po/LINGUAS
===================================================================
--- trunk/Po/LINGUAS 2006-12-15 10:00:01 UTC (rev 275)
+++ trunk/Po/LINGUAS 2006-12-21 08:24:59 UTC (rev 276)
@@ -3,3 +3,4 @@
jp
pt_BR
sk
+sv
Modified: trunk/Src/ChangeLog
===================================================================
--- trunk/Src/ChangeLog 2006-12-15 10:00:01 UTC (rev 275)
+++ trunk/Src/ChangeLog 2006-12-21 08:24:59 UTC (rev 276)
@@ -1,3 +1,8 @@
+2006-12-21 Timo Schulz <twoaday at freakmail.de>
+
+ * wptCryptDisk.cpp, wptCryptDiskSrv.cpp: Deleted.
+ The Code will be possibly used in a separate project.
+
2006-12-05 Timo Schulz <twoaday at freakmail.de>
* wptClipDecryptDlg.cpp (verify_get_clip_info): If
Modified: trunk/Src/Makefile.am
===================================================================
--- trunk/Src/Makefile.am 2006-12-15 10:00:01 UTC (rev 275)
+++ trunk/Src/Makefile.am 2006-12-21 08:24:59 UTC (rev 276)
@@ -81,7 +81,6 @@
WinPT.cpp \
wptCardManager.cpp \
wptCardPCSC.cpp \
- wptCryptdisk.cpp \
wptCurrWnd.cpp \
wptErrors.cpp \
wptFileManager.cpp \
Deleted: trunk/Src/wptCryptdisk.cpp
===================================================================
--- trunk/Src/wptCryptdisk.cpp 2006-12-15 10:00:01 UTC (rev 275)
+++ trunk/Src/wptCryptdisk.cpp 2006-12-21 08:24:59 UTC (rev 276)
@@ -1,709 +0,0 @@
-/* wptCryptdisk.cpp
- * Copyright (C) 2004, 2006 Timo Schulz
- *
- * This file is part of WinPT.
- *
- * WinPT is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * WinPT is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with WinPT; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#if 0 /* disabled until the code really works on all systems. */
-#include <windows.h>
-#include <winioctl.h>
-#include <stdio.h>
-#include <ctype.h>
-
-#include "resource.h"
-#include "wptCryptdisk.h"
-#include "wptTypes.h"
-#include "wptW32API.h"
-#include "wptNLS.h"
-#include "wptErrors.h"
-
-/*DWORD SHFormatDrive(HWND hwnd, UINT drive, UINT fmtID, UINT options);*/
-typedef DWORD (WINAPI *sh_format_drive_p) (HWND, UINT, UINT, UINT);
-
-static mount_list_t mounted=NULL;
-static HMODULE shell32=NULL;
-static sh_format_drive_p shfmt=NULL;
-
-
-static int
-is_nt4 (void)
-{
- static int nt_flag = -1;
- OSVERSIONINFO osinf;
-
- if (nt_flag != -1)
- return nt_flag;
-
- memset (&osinf, 0, sizeof osinf);
- osinf.dwOSVersionInfoSize = sizeof osinf;
- GetVersionEx (&osinf);
- if (osinf.dwPlatformId == VER_PLATFORM_WIN32_NT) {
- nt_flag = 1;
- shell32 = LoadLibrary ("SHELL32.DLL");
- shfmt = (sh_format_drive_p)GetProcAddress (shell32, "SHFormatDrive");
- if (!shfmt)
- BUG (0);
- }
- else
- nt_flag = 0;
- return nt_flag;
-}
-
-static int
-check_filedisk (void)
-{
- HKEY hk;
- int rc = -1;
-
- rc = RegOpenKeyEx (HKEY_LOCAL_MACHINE,
- "SYSTEM\\CurrentControlSet\\Services\\FileDisk",
- 0, KEY_READ, &hk);
- if (rc == ERROR_SUCCESS) {
- RegCloseKey (hk);
- rc = 0;
- }
- return rc;
-}
-
-
-int
-cryptdisk_available (void)
-{
- return (is_nt4 () == 1 && check_filedisk () == 0)? 1 : 0;
-}
-
-
-void
-cryptdisk_cleanup (void)
-{
- if (shell32)
- FreeLibrary (shell32);
- shell32 = NULL;
-}
-
-
-static int
-num_of_devices (void)
-{
- HKEY hk;
- BYTE buf[32];
- DWORD n=0, type=0;
- int rc;
-
- rc = RegOpenKeyEx (HKEY_LOCAL_MACHINE,
- "SYSTEM\\CurrentControlSet\\Services\\FileDisk\\Parameters",
- 0, KEY_READ, &hk);
- if (rc != ERROR_SUCCESS)
- return -1;
-
- n = sizeof buf-1;
- memset (buf, 0, sizeof buf);
- rc = RegQueryValueEx (hk, "NumberOfDevices", 0, &type, buf, &n);
- if (rc != ERROR_SUCCESS || type != REG_DWORD)
- n=0;
- else
- n = *buf;
- RegCloseKey (hk);
- return n;
-}
-
-
-static HWND
-start_cryptdisk_server (HANDLE * r_proc)
-{
- STARTUPINFO si;
- PROCESS_INFORMATION pi;
-
- memset (&si, 0, sizeof si);
- memset (&pi, 0, sizeof pi);
- si.cb = sizeof si;
-
- if (CreateProcess (NULL, "CryptdiskSrv", NULL, NULL, FALSE, 0,
- NULL, NULL, &si, &pi) == FALSE) {
- msg_box (NULL, _("Could not execute Cryptdisk Server."),
- _("Cryptdisk Error"), MB_ERR);
- return NULL;
- }
- *r_proc = pi.hProcess;
- Sleep (300);
- return FindWindow ("CryptdiskSrv", NULL);
-}
-
-
-static int
-cryptdisk_mount (int devnum,
- const char * imgfile,
- DWORD size,
- const char * hdlet)
-{
- HWND h;
- HANDLE proc, wait_ev;
- COPYDATASTRUCT cds;
- struct private_ofi_s ofi;
-
- h = start_cryptdisk_server (&proc);
- if (!h)
- return WPTERR_GENERAL;
- memset (&ofi, 0, sizeof ofi);
- ofi.cmd = CMD_MOUNT;
- ofi.devnum = devnum;
- ofi.filesize.LowPart = size;
- ofi.drvlet = *hdlet;
- ofi.readonly = 0;
- strcpy ((char *)ofi.fname, imgfile);
- ofi.flen = strlen (imgfile);
-
- wait_ev = OpenEvent (SYNCHRONIZE, FALSE, "cryptdisksrv.wait");
- if (!wait_ev)
- BUG (0);
- memset (&cds, 0, sizeof cds);
- cds.cbData = sizeof ofi;
- cds.lpData = &ofi;
- SendMessage (h, WM_COPYDATA, (WPARAM)GetDesktopWindow (), (LPARAM)&cds);
- WaitForSingleObject (wait_ev, INFINITE);
- CloseHandle (wait_ev);
- CloseHandle (proc);
- return 0;
-}
-
-
-
-int
-cryptdisk_unmount (char drivelet, int forced)
-{
- HWND h;
- HANDLE proc;
- COPYDATASTRUCT cds;
- struct private_ofi_s ofi;
-
- h = start_cryptdisk_server (&proc);
- if (!h)
- return WPTERR_GENERAL;
-
- memset (&ofi, 0, sizeof ofi);
- ofi.cmd = CMD_UMOUNT;
- ofi.drvlet = drivelet;
- ofi.forced = forced;
-
- memset (&cds, 0, sizeof cds);
- cds.lpData = &ofi;
- cds.cbData = sizeof ofi;
- SendMessage (h, WM_COPYDATA, (WPARAM)GetDesktopWindow (), (LPARAM)&cds);
- CloseHandle (proc);
-
- return 0;
-}
-
-static void
-print_lasterr (char * prefix)
-{
- LPVOID msg;
-
- FormatMessage(
- FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL,
- GetLastError(),
- 0,
- (LPTSTR) &msg,
- 0,
- NULL
- );
- MessageBox (NULL, (LPTSTR)msg, prefix, MB_ICONERROR|MB_OK);
- LocalFree (msg);
-}
-
-
-static int
-filedisk_status (char drivelet, LARGE_INTEGER * size, int * rdonly)
-{
- char VolumeName[] = "\\\\.\\ :";
- HANDLE Device;
- POPEN_FILE_INFORMATION ofi;
- DWORD BytesReturned;
- int n= sizeof (OPEN_FILE_INFORMATION)+ MAX_PATH;
-
- VolumeName[4] = drivelet;
-
- Device = CreateFile (VolumeName,
- GENERIC_READ,
- FILE_SHARE_READ | FILE_SHARE_WRITE,
- NULL,
- OPEN_EXISTING,
- FILE_FLAG_NO_BUFFERING,
- NULL);
-
- if (Device == INVALID_HANDLE_VALUE) {
- print_lasterr(&VolumeName[4]);
- return WPTERR_CDISK_OPEN;
- }
-
- ofi = (POPEN_FILE_INFORMATION)malloc (n);
-
- if (!DeviceIoControl (Device,
- IOCTL_FILE_DISK_QUERY_FILE,
- NULL,
- 0,
- ofi,
- sizeof(OPEN_FILE_INFORMATION) + MAX_PATH,
- &BytesReturned, NULL)) {
- print_lasterr (&VolumeName[4]);
- return WPTERR_CDISK_QUERY;
- }
-
- if (BytesReturned < sizeof(OPEN_FILE_INFORMATION)) {
- SetLastError (ERROR_INSUFFICIENT_BUFFER);
- print_lasterr (&VolumeName[4]);
- return WPTERR_CDISK_QUERY;
- }
-
- if (size)
- *size = ofi->FileSize;
- if (rdonly)
- *rdonly = ofi->ReadOnly;
-
- return 0;
-}
-
-
-static mount_list_t
-new_mount_list (const char * drive, int devnum)
-{
- mount_list_t n;
-
- n = (mount_list_t)calloc (1, sizeof *n);
- if (n) {
- strcpy (n->drive, drive);
- n->devnum = devnum;
- n->ttl = 1;
- filedisk_status (*drive, &n->size, &n->rdonly);
- }
- return n;
-}
-
-
-static mount_list_t
-find_mount_list (mount_list_t root, const char * drive)
-{
- mount_list_t n;
-
- for (n=root; n; n=n->next) {
- if (n->ttl == 0)
- continue;
- if (!strncmp (n->drive, drive, strlen (drive)))
- return n;
- }
- return NULL;
-}
-
-
-static void
-add_mount_list (mount_list_t root, mount_list_t node)
-{
- mount_list_t n;
-
- if (find_mount_list (root, node->drive))
- return;
-
- for (n=root; n->next; n=n->next)
- ;
- n->next = node;
-}
-
-
-static void
-remove_mount_list (mount_list_t root, mount_list_t node)
-{
- mount_list_t n;
-
- n = find_mount_list (root, node->drive);
- if (n)
- n->ttl = 0;
-}
-
-
-static void
-free_mount_list (mount_list_t root)
-{
- mount_list_t n;
-
- while (root) {
- n = root->next;
- free (root);
- root = n;
- }
-}
-
-
-static int
-last_devnum (mount_list_t root)
-{
- mount_list_t n;
- int devnum=0;
-
- if (!root)
- return 0;
-
- for (n=root; n; n=n->next) {
- if (devnum < n->devnum)
- devnum=n->devnum;
- }
- return devnum+1;
-}
-
-
-static char
-init_drives (HWND dlg, int ctlid)
-{
- char buf[512], drv[5];
- DWORD n=0, i=0;
-
- n=GetLogicalDriveStrings (sizeof buf-1, buf);
- for (i=0; i < n; i++) {
- memcpy (drv, buf+i, 3); drv[3]=0;
- i += 3;
- }
- if (!dlg && ctlid == -1)
- return ++drv[0];
-
- for (++drv[0]; drv[0] < 'Z'; drv[0]++)
- SendDlgItemMessage (dlg, ctlid, CB_ADDSTRING, 0,
- (LPARAM)(const char *)drv);
- SendDlgItemMessage (dlg, ctlid, CB_SETCURSEL, 0, 0);
- return 0;
-}
-
-
-static int
-check_freespace (const char * imgfile, DWORD size)
-{
- ULARGE_INTEGER tocaller, total, totfree;
- char buf[128] = {0};
-
- if (!strchr (imgfile, ':'))
- GetCurrentDirectory (sizeof buf-1, buf);
- else
- strncpy (buf, imgfile, sizeof buf-1);
- buf[3] = '\0';
- GetDiskFreeSpaceEx (buf, &tocaller, &total, &totfree);
- if (size > tocaller.LowPart)
- return -1;
- return 0;
-}
-
-
-static void
-do_check (HWND dlg)
-{
- if (!cryptdisk_serv_run ()) { /* xxx */
- msg_box (dlg, _("The Cryptdisk service seems to be available but "
- "it is not started yet.\nPlease start the service "
- "and try again."), _("Cryptdisk Error"), MB_ERR);
- EndDialog (dlg, TRUE);
- }
-}
-
-
-BOOL CALLBACK
-cryptdisk_new_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
-{
- const char * ciphers [] = {
- "twofish",
- NULL
- };
- const char * s;
- char imgfile[128], key[128], drv[3];
- int i;
- DWORD size=0;
-
- switch (msg) {
- case WM_INITDIALOG:
- do_check (dlg);
- SetDlgItemInt (dlg, IDC_CDNEW_SIZE, DISK_DEFSIZE, FALSE);
- for (i=0; (s=ciphers[i]); i++)
- SendDlgItemMessage (dlg, IDC_CDNEW_CIPHERS, CB_ADDSTRING,
- 0, (LPARAM)(const char *) s);
- SendDlgItemMessage (dlg, IDC_CDNEW_CIPHERS, CB_SETCURSEL, 0, 0);
- center_window (dlg, NULL);
- SetForegroundWindow (dlg);
- break;
-
- case WM_COMMAND:
- switch (LOWORD (wparam)) {
- case IDOK:
- i = GetDlgItemText (dlg, IDC_CDNEW_IMGFILE, imgfile, sizeof imgfile-1);
- if (!i) {
- msg_box (dlg, _("Please enter a name for the image file."),
- _("Cryptdisk"), MB_ERR);
- return FALSE;
- }
- if (file_exist_check (imgfile) == 0) {
- i = msg_box (dlg, _("This volume file already exists.\n"
- "Do you want to overwrite it?"),
- _("Cryptdisk Warning"), MB_YESNO|MB_WARN);
- if (i == IDNO)
- return FALSE;
- }
- for (i=0; i < (int)strlen (imgfile); i++)
- imgfile[i] = toupper (imgfile[i]);
- size = GetDlgItemInt (dlg, IDC_CDNEW_SIZE, NULL, FALSE);
- if (!size) {
- msg_box (dlg, _("Please enter the size for the volume"),
- _("Cryptdisk"), MB_INFO);
- return FALSE;
- }
- size *= 1024; /*KB*/
- if (check_freespace (imgfile, (size*1024))) {
- msg_box (dlg, _("There is not enough free disk space to "
- "store the volume."), _("Cryptdisk"), MB_ERR);
- return FALSE;
- }
- i = GetDlgItemText (dlg, IDC_CDNEW_PASS, key, sizeof key-1);
- if (!i) {
- msg_box (dlg, _("Please enter a passphrase for the volume."),
- _("Cryptdisk"), MB_ERR);
- return FALSE;
- }
- strcpy (drv, "?:\\");
- drv[0] = init_drives (NULL, -1);
- i = cryptdisk_mount (last_devnum (mounted), imgfile, size, drv);
- if (!i)
- shfmt (dlg, drv[0] - 65, 0, 0);
- break;
- case IDCANCEL:
- EndDialog (dlg, FALSE);
- break;
- }
- break;
-
- }
-
- return FALSE;
-}
-
-
-BOOL CALLBACK
-cryptdisk_mount_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
-{
- const char * s_imgfile;
- char buf[8], drive[8], passwd[64], imgfile[128];
- int n, i, devnum=0;
- int rc;
-
- switch (msg) {
- case WM_INITDIALOG:
- do_check (dlg);
- s_imgfile = (const char *)lparam;
- if (s_imgfile)
- SetDlgItemText (dlg, IDC_CDMOUNT_IMGFILE, s_imgfile);
- init_drives (dlg, IDC_CDMOUNT_DRV);
- n = num_of_devices ();
- if (n == -1) {
- msg_box (dlg, _("Cannot determine the number of drives."),
- _("Cryptdisk Error"), MB_ERR);
- EndDialog (dlg, FALSE);
- }
- for (i=last_devnum (mounted); i < n; i++) {
- sprintf (buf, "%d", i);
- SendDlgItemMessage (dlg, IDC_CDMOUNT_ID, CB_ADDSTRING, 0,
- (LPARAM)(const char *)buf);
- }
- SendDlgItemMessage (dlg, IDC_CDMOUNT_ID, CB_SETCURSEL, 0, 0);
- center_window (dlg, NULL);
- SetForegroundWindow (dlg);
- break;
-
- case WM_COMMAND:
- switch (LOWORD (wparam)) {
- case IDC_CDMOUNT_SELFILE:
- s_imgfile = get_fileopen_dlg (dlg, _("Select Crypdisk Volume"),
- NULL, NULL);
- if (s_imgfile != NULL)
- SetDlgItemText (dlg, IDC_CDMOUNT_IMGFILE, s_imgfile);
- break;
-
- case IDOK:
- n = item_get_text_length (dlg, IDC_CDMOUNT_IMGFILE);
- if (!n) {
- msg_box (dlg, _("Please enter the name of the image file."),
- _("Cryptdisk Error"), MB_ERR);
- return FALSE;
- }
- n = item_get_text_length (dlg, IDC_CDMOUNT_PASS);
- if (!n) {
- msg_box (dlg, _("Please enter a password."),
- _("Cryptdisk Error"), MB_ERR);
- return FALSE;
- }
- devnum = GetDlgItemInt (dlg, IDC_CDMOUNT_ID, NULL, FALSE);
- GetDlgItemText (dlg, IDC_CDMOUNT_DRV, drive, sizeof drive-1);
- GetDlgItemText (dlg, IDC_CDMOUNT_PASS, passwd, sizeof passwd-1);
- GetDlgItemText (dlg, IDC_CDMOUNT_IMGFILE, imgfile, sizeof imgfile-1);
- if (file_exist_check (imgfile)) {
- msg_box (dlg, _("Image file does not exist or could not be accessed."),
- _("Cryptdisk Error"), MB_ERR);
- return FALSE;
- }
- rc = cryptdisk_mount (devnum, imgfile, 0, drive);
- if (!rc) {
- mount_list_t t = new_mount_list (drive, devnum);
- if (!mounted)
- mounted = t;
- else
- add_mount_list (mounted, t);
- EndDialog (dlg, TRUE);
- }
- else
- msg_box (dlg, winpt_strerror (rc), _("Cryptdisk Error"), MB_ERR);
- break;
-
- case IDCANCEL:
- EndDialog (dlg, FALSE);
- break;
- }
- break;
- }
- return FALSE;
-}
-
-
-static void
-load_devs_from_mountlist (HWND dlg, int ctlid)
-{
- mount_list_t n;
- char buf[128];
-
- if (!mounted)
- return;
-
- for (n=mounted; n; n=n->next) {
- if (n->ttl == 0)
- continue;
- _snprintf (buf, sizeof buf-1, _("Drive %s (ID %d); Size %d MB, Readonly=%s"),
- n->drive, n->devnum, n->size.LowPart/1024/1024,
- n->rdonly? "true" : "false");
- SendDlgItemMessage (dlg, ctlid, LB_ADDSTRING, 0, (LPARAM)(const char *)buf);
- }
-
-}
-
-
-static void
-do_reaping (void)
-{
- mount_list_t n;
- int ndevs=0, numount=0;
-
- for (n=mounted; n; n=n->next) {
- if (n->ttl == 0)
- numount++;
- ndevs++;
- }
- if (ndevs == numount) {
- free_mount_list (mounted);
- mounted = NULL;
- }
-}
-
-
-BOOL CALLBACK
-cryptdisk_umount_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
-{
- mount_list_t vol;
- char buf[128];
- int n, rc=0;
-
- switch (msg) {
- case WM_INITDIALOG:
- do_check (dlg);
- load_devs_from_mountlist (dlg, IDC_CDUMOUNT_LIST);
- center_window (dlg, NULL);
- SetForegroundWindow (dlg);
- break;
-
- case WM_DESTROY:
- do_reaping ();
- break;
-
- case WM_COMMAND:
- switch (LOWORD (wparam)) {
- case IDOK:
- n = SendDlgItemMessage (dlg, IDC_CDUMOUNT_LIST, LB_GETCURSEL, 0, 0);
- if (n == LB_ERR) {
- msg_box (dlg, _("Please select one drive to umount."), _("Cryptdisk"), MB_INFO);
- return FALSE;
- }
- SendDlgItemMessage (dlg, IDC_CDUMOUNT_LIST, LB_GETTEXT, n,
- (LPARAM)(char *)buf);
- strcpy (buf, buf+6);
- buf[2] = '\0';
- vol = find_mount_list (mounted, buf);
- if (!vol)
- BUG (0);
- rc = cryptdisk_unmount (buf[0], 0);
- //if (rc == WPTERR_CDISK_LOCK)
- // rc = cryptdisk_unmount (buf[0], 0);
- if (!rc) {
- SendDlgItemMessage (dlg, IDC_CDUMOUNT_LIST, LB_DELETESTRING, (WPARAM)n, 0);
- remove_mount_list (mounted, vol);
- }
- else
- msg_box (dlg, winpt_strerror (rc), _("Cryptdisk Error"), MB_ERR);
- break;
- case IDCANCEL:
- EndDialog (dlg, FALSE);
- break;
- }
- break;
- }
-
- return FALSE;
-}
-
-
-int
-cryptdisk_serv_run (void)
-{
- SC_HANDLE hd;
- ENUM_SERVICE_STATUS ess[4096];
- DWORD nservs=0, dummy=0;
- DWORD i;
- int rc=0;
-
- hd = OpenSCManager (NULL, NULL, SC_MANAGER_ENUMERATE_SERVICE);
- if (!hd)
- return 0;
-
- EnumServicesStatus (hd, SERVICE_DRIVER, SERVICE_ACTIVE,
- (LPENUM_SERVICE_STATUS)&ess,
- sizeof ess-1, &dummy, &nservs, &dummy);
-
- for (i=0; i < nservs; i++) {
- if (!strnicmp ("FileDisk", ess[i].lpDisplayName, 8)) {
- rc = 1;
- break;
- }
- }
-
- CloseServiceHandle (hd);
- return rc;
-}
-#endif
Deleted: trunk/Src/wptCryptdiskSrv.cpp
===================================================================
--- trunk/Src/wptCryptdiskSrv.cpp 2006-12-15 10:00:01 UTC (rev 275)
+++ trunk/Src/wptCryptdiskSrv.cpp 2006-12-21 08:24:59 UTC (rev 276)
@@ -1,464 +0,0 @@
-/* wptCryptdiskSrv.cpp - Server application for Cryptdisk
- *
- * Control program for a virtual disk driver for Windows NT/2000/XP.
- * Copyright (C) 1999, 2000, 2001, 2002 Bo Brantén.
- *
- * Heavily modified for the use with Cryptdisk by Timo Schulz
- * (C) 2004 Timo Schulz
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <windows.h>
-#include <winioctl.h>
-#include <stdio.h>
-#include <sys/types.h>
-
-#define PGM_NAME "CryptdiskSrv"
-
-/* remember to change the values in wptErrors.h also */
-#define CDISK_ERR_LOCK 201
-#define CDISK_ERR_MOUNT 202
-#define CDISK_ERR_UMOUNT 203
-#define CDISK_ERR_OPEN 204
-#define CDISK_ERR_BUSY 205
-#define CDISK_ERR_QUERY 206
-
-#define DEVICE_BASE_NAME "\\FileDisk"
-#define DEVICE_DIR_NAME "\\Device" DEVICE_BASE_NAME
-#define DEVICE_NAME_PREFIX DEVICE_DIR_NAME DEVICE_BASE_NAME
-
-#define FILE_DEVICE_FILE_DISK 0x8000
-
-#define IOCTL_FILE_DISK_OPEN_FILE CTL_CODE(FILE_DEVICE_FILE_DISK, 0x800, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
-#define IOCTL_FILE_DISK_CLOSE_FILE CTL_CODE(FILE_DEVICE_FILE_DISK, 0x801, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
-#define IOCTL_FILE_DISK_QUERY_FILE CTL_CODE(FILE_DEVICE_FILE_DISK, 0x802, METHOD_BUFFERED, FILE_READ_ACCESS)
-
-enum cmd_t {
- CMD_MOUNT =0,
- CMD_NEW =1,
- CMD_UMOUNT =2,
- CMD_UMOUNT2 =3,
-};
-
-struct private_ofi_s {
- INT forced;
- INT cmd;
- INT devnum;
- CHAR drvlet;
- LARGE_INTEGER filesize;
- BOOLEAN readonly;
- USHORT flen;
- UCHAR fname[MAX_PATH+1];
-};
-
-
-typedef struct _OPEN_FILE_INFORMATION {
- LARGE_INTEGER FileSize;
- BOOLEAN ReadOnly;
- USHORT FileNameLength;
- UCHAR FileName[1];
-} OPEN_FILE_INFORMATION, *POPEN_FILE_INFORMATION;
-
-
-static struct private_ofi_s ofi;
-static HANDLE wait_ev = NULL;
-
-static void
-print_lasterr (char * prefix)
-{
- LPVOID msg;
-
- FormatMessage(
- FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL,
- GetLastError(),
- 0,
- (LPTSTR) &msg,
- 0,
- NULL
- );
- MessageBox (NULL, (LPTSTR)msg, prefix, MB_ICONERROR|MB_OK);
- LocalFree (msg);
-}
-
-
-int
-filedisk_mount (int DeviceNumber,
- POPEN_FILE_INFORMATION ofi,
- char drivelet,
- BOOLEAN CdImage)
-{
- char VolumeName[] = "\\\\.\\ :";
- char DeviceName[255];
- HANDLE Device;
- DWORD BytesReturned;
-
- VolumeName[4] = drivelet;
-
- Device = CreateFile (VolumeName,
- GENERIC_READ | GENERIC_WRITE,
- FILE_SHARE_READ | FILE_SHARE_WRITE,
- NULL,
- OPEN_EXISTING,
- FILE_FLAG_NO_BUFFERING,
- NULL);
- if (Device != INVALID_HANDLE_VALUE) {
- SetLastError (ERROR_BUSY);
- print_lasterr (&VolumeName[4]);
- return CDISK_ERR_BUSY;
- }
-
- if (CdImage)
- sprintf (DeviceName, DEVICE_NAME_PREFIX "Cd" "%u", DeviceNumber);
- else
- sprintf (DeviceName, DEVICE_NAME_PREFIX "%u", DeviceNumber);
-
- if (!DefineDosDevice (DDD_RAW_TARGET_PATH,
- &VolumeName[4],
- DeviceName)) {
- print_lasterr (&VolumeName[4]);
- return CDISK_ERR_OPEN;
- }
-
- Device = CreateFile (VolumeName,
- GENERIC_READ | GENERIC_WRITE,
- FILE_SHARE_READ | FILE_SHARE_WRITE,
- NULL,
- OPEN_EXISTING,
- FILE_FLAG_NO_BUFFERING,
- NULL);
-
- if (Device == INVALID_HANDLE_VALUE) {
- print_lasterr (&VolumeName[4]);
- DefineDosDevice (DDD_REMOVE_DEFINITION, &VolumeName[4], NULL);
- return CDISK_ERR_OPEN;
- }
-
- if (!DeviceIoControl (Device,
- IOCTL_FILE_DISK_OPEN_FILE,
- ofi,
- sizeof(OPEN_FILE_INFORMATION) + ofi->FileNameLength - 1,
- NULL, 0, &BytesReturned, NULL)) {
- print_lasterr ("Cryptdisk Error");
- DefineDosDevice (DDD_REMOVE_DEFINITION, &VolumeName[4], NULL);
- return CDISK_ERR_MOUNT;
- }
-
- return 0;
-}
-
-
-static int
-filedisk_unmount2 (char drivelet, int flags, int forced)
-{
- char VolumeName[60] = "\\\\.\\ :";
- HANDLE Device;
- DWORD BytesReturned;
-
- if (!flags)
- VolumeName[4] = drivelet;
- else if (flags & 1)
- sprintf(VolumeName,"\\\\.\\FileDisk%d", drivelet);
- else if (flags & 2)
- sprintf(VolumeName,"\\\\.\\FileDiskCd%d",drivelet);
-
- Device = CreateFile (VolumeName,
- GENERIC_READ | GENERIC_WRITE,
- FILE_SHARE_READ | FILE_SHARE_WRITE,
- NULL,
- OPEN_EXISTING,
- FILE_FLAG_NO_BUFFERING,
- NULL);
- if (Device == INVALID_HANDLE_VALUE) {
- if (forced)
- print_lasterr(&VolumeName[4]);
- return CDISK_ERR_OPEN;
- }
-
- if (!DeviceIoControl (Device,
- FSCTL_LOCK_VOLUME,
- NULL, 0, NULL, 0,
- &BytesReturned, NULL)) {
- if (forced) {
- print_lasterr(&VolumeName[4]);
- return CDISK_ERR_LOCK;
- }
- }
-
- if (!DeviceIoControl (Device,
- IOCTL_FILE_DISK_CLOSE_FILE,
- NULL, 0, NULL, 0,
- &BytesReturned, NULL )) {
- if (forced)
- print_lasterr ("Cryptdisk Error");
- return CDISK_ERR_UMOUNT;
- }
-
- if (!DeviceIoControl (
- Device, FSCTL_DISMOUNT_VOLUME,
- NULL, 0, NULL, 0,
- &BytesReturned, NULL)) {
- if (forced)
- print_lasterr (&VolumeName[4]);
- return CDISK_ERR_UMOUNT;
- }
-
- if (!DeviceIoControl (Device,
- FSCTL_UNLOCK_VOLUME,
- NULL, 0, NULL, 0,
- &BytesReturned, NULL)) {
- if (forced) {
- print_lasterr (&VolumeName[4]);
- return CDISK_ERR_LOCK;
- }
- }
-
- CloseHandle (Device);
-
- if (!DefineDosDevice (
- DDD_REMOVE_DEFINITION,
- &VolumeName[4], NULL)) {
- if (forced)
- print_lasterr (&VolumeName[4]);
- return CDISK_ERR_UMOUNT;
- }
-
- return 0;
-}
-
-int
-filedisk_unmount (char drivelet, int forced)
-{
- char i;
-
- if (drivelet) {
- int rc = filedisk_unmount2 (drivelet, 0, forced);
- if (rc)
- print_lasterr ("Unmount");
- return rc;
- }
- for (i=0; i<20;i++) {
- if (filedisk_unmount2 (i, 1, 0) == CDISK_ERR_OPEN)
- break;
- }
- for (i=0; i<20;i++) {
- if (filedisk_unmount2 (i, 2, 0) == CDISK_ERR_OPEN)
- break;
- }
- return 0;
-}
-
-
-int
-filedisk_status (char drivelet, LARGE_INTEGER * size, int * rdonly)
-{
- char VolumeName[] = "\\\\.\\ :";
- HANDLE Device;
- POPEN_FILE_INFORMATION ofi;
- DWORD BytesReturned;
-
- VolumeName[4] = drivelet;
-
- Device = CreateFile (VolumeName,
- GENERIC_READ,
- FILE_SHARE_READ | FILE_SHARE_WRITE,
- NULL,
- OPEN_EXISTING,
- FILE_FLAG_NO_BUFFERING,
- NULL);
-
- if (Device == INVALID_HANDLE_VALUE) {
- print_lasterr(&VolumeName[4]);
- return CDISK_ERR_OPEN;
- }
-
- ofi = (POPEN_FILE_INFORMATION)malloc (sizeof(OPEN_FILE_INFORMATION) + MAX_PATH);
-
- if (!DeviceIoControl (Device,
- IOCTL_FILE_DISK_QUERY_FILE,
- NULL,
- 0,
- ofi,
- sizeof(OPEN_FILE_INFORMATION) + MAX_PATH,
- &BytesReturned, NULL)) {
- print_lasterr (&VolumeName[4]);
- return CDISK_ERR_QUERY;
- }
-
- if (BytesReturned < sizeof(OPEN_FILE_INFORMATION)) {
- SetLastError (ERROR_INSUFFICIENT_BUFFER);
- print_lasterr (&VolumeName[4]);
- return CDISK_ERR_QUERY;
- }
-
- if (size)
- *size = ofi->FileSize;
- if (rdonly)
- *rdonly = ofi->ReadOnly;
-
- return 0;
-}
-
-
-POPEN_FILE_INFORMATION
-filedisk_init_info (int devnum, char drivelet, const char * file,
- int ro, int cd_img, unsigned long size)
-{
- POPEN_FILE_INFORMATION pfi;
- char * p;
-
- pfi = (POPEN_FILE_INFORMATION)
- calloc (1, sizeof(OPEN_FILE_INFORMATION) + strlen (file) + 7);
- p = (char *)pfi->FileName;
-
- if (file[0] == '\\') {
- if (file[1] == '\\' && file[2] != '.') {
- /* \\server\share\path\filedisk.img */
- strcpy(p, "\\??\\UNC");
- strcat(p, file + 1);
- }
- else /* \Device\Harddisk0\Partition1\path\filedisk.img */
- strcpy(p, file);
- }
- else { // c:\path\filedisk.img
- strcpy (p, "\\??\\");
- strcat (p, file);
- }
-
- pfi->FileNameLength = (USHORT) strlen (p);
- pfi->ReadOnly = ro? TRUE : FALSE;
- if (cd_img)
- pfi->ReadOnly = TRUE;
- if (size)
- pfi->FileSize.QuadPart = size * 1024;
- return pfi;
-}
-
-
-void
-filedisk_free_info (POPEN_FILE_INFORMATION pfi)
-{
- if (!pfi)
- return;
- free (pfi);
-}
-
-
-LRESULT CALLBACK
-def_window_proc (HWND hwnd, UINT msg, WPARAM w, LPARAM l)
-{
- COPYDATASTRUCT * cds;
-
- switch (msg) {
- case WM_DESTROY:
- PostQuitMessage (0);
- break;
-
- case WM_COPYDATA:
- cds = (COPYDATASTRUCT *)l;
- if (!cds || cds->cbData == 0)
- break;
- memcpy ((private_ofi_s *)&ofi, cds->lpData, cds->cbData);
- DestroyWindow (hwnd);
- break;
- }
- return DefWindowProc (hwnd, msg, w, l);
-}
-
-
-int WINAPI
-WinMain (HINSTANCE h, HINSTANCE hp, LPSTR cl, int show)
-{
- POPEN_FILE_INFORMATION pfi;
- WNDCLASS wc = {0, def_window_proc, 0, 0, h, 0, 0, 0, 0, PGM_NAME};
- HWND hwnd;
- MSG msg;
- int rc;
-
- wait_ev = CreateEvent (NULL, FALSE, FALSE, "cryptdisksrv.wait");
- if (!wait_ev) {
- MessageBox (NULL, "Could not create wait event.", "CryptdiskSrv",
- MB_ICONERROR|MB_OK);
- return 0;
- }
-
- rc = RegisterClass (&wc);
- if (rc == FALSE) {
- MessageBox (NULL, "Could not register window class", "CryptdiskSrv",
- MB_ICONERROR|MB_OK);
- CloseHandle (wait_ev);
- return 0;
- }
-
- hwnd = CreateWindow (PGM_NAME,
- PGM_NAME,
- 0, 0, 0, 0, 0,
- NULL,
- NULL,
- h,
- NULL);
- if (hwnd == NULL) {
- MessageBox (NULL, "Could not create window", "CryptdiskSrv",
- MB_ICONERROR|MB_OK);
- CloseHandle (wait_ev);
- return 0;
- }
-
- UpdateWindow (hwnd);
- while (GetMessage (&msg, hwnd, 0, 0)) {
- TranslateMessage (&msg);
- DispatchMessage (&msg);
- }
-
- {
- FILE * logf;
-
- logf = fopen ("cryptdisk.log", "a+b");
- if (logf) {
- fprintf (logf, "cmd=%d devnum=%d drive=%c name=%s len=%d size=%d forced=%d\r\n",
- ofi.cmd, ofi.devnum, ofi.drvlet, ofi.fname, ofi.flen,
- ofi.filesize, ofi.forced);
- fclose (logf);
- }
- }
-
- SetEvent (wait_ev);
- switch (ofi.cmd) {
- case CMD_NEW:
- case CMD_MOUNT:
- pfi = filedisk_init_info (ofi.devnum, ofi.drvlet,
- (const char *)ofi.fname,
- 0, 0, ofi.filesize.LowPart);
- rc = filedisk_mount (ofi.devnum, pfi, ofi.drvlet, FALSE);
- filedisk_free_info (pfi);
- break;
-
- case CMD_UMOUNT:
- rc = filedisk_unmount (ofi.drvlet, ofi.forced);
- break;
-
- case CMD_UMOUNT2:
- rc = filedisk_unmount (0, 0);
- break;
- }
- ResetEvent (wait_ev);
- CloseHandle (wait_ev);
- return rc;
-}
Modified: trunk/Src/wptKeyserver.cpp
===================================================================
--- trunk/Src/wptKeyserver.cpp 2006-12-15 10:00:01 UTC (rev 275)
+++ trunk/Src/wptKeyserver.cpp 2006-12-21 08:24:59 UTC (rev 276)
@@ -1539,7 +1539,7 @@
return WPTERR_WINSOCK_RECVKEY;
for (;;) {
- if (sock_getline (fd, buf, DIM (buf)-1, &nread))
+ if (sock_getline (fd, buf, DIM (buf)-2, &nread))
break;
strcat (buf, "\n");
if (strstr (buf, "BEGIN PGP PUBLIC KEY BLOCK")) {
Modified: trunk/TODO
===================================================================
--- trunk/TODO 2006-12-15 10:00:01 UTC (rev 275)
+++ trunk/TODO 2006-12-21 08:24:59 UTC (rev 276)
@@ -24,9 +24,10 @@
* CARD
- sign/decrypt
- factor out some common code into wptCardManager.cpp
- - Move the both managers (key/file) to separate applications
- and use MFC control elemens for the treelist element.
+ * Factor out some Managers into separate applications and provide
+ a core library for common tasks.
* Implement the non-swapable memory for passphrase handling.
+ Implement "LockSetForegroundWindow".
- Allow to use "XP skins" to provide a better look in a XP/Vista
environment.
@@ -43,11 +44,12 @@
GPG_ERR_CARD_REMOVED)
* The current way to send large file through pipes is OK as
- long as the file is not too large. The limite is <100 MB.
+ long as the file is not too large. The limit is <100 MB.
Otherwise the process would take too much time and propably
the window/process freezes up.
(fixed in gpgme 1.1.1)
+
Mobile Mode
===========
Modified: trunk/configure.ac
===================================================================
--- trunk/configure.ac 2006-12-15 10:00:01 UTC (rev 275)
+++ trunk/configure.ac 2006-12-21 08:24:59 UTC (rev 276)
@@ -15,7 +15,7 @@
# Version number: Remember to change it immediately *after* a release.
# Add a "-cvs" prefix for non-released code.
-AC_INIT(WinPT, 1.2.0, http://wald.intevation.org/projects/winpt)
+AC_INIT(WinPT, 1.2.1-cvs, http://wald.intevation.org/projects/winpt)
NEED_GPG_VERSION=1.4.4
NEED_GPGME_API=1
NEED_GPGME_VERSION=1.1.1
More information about the Winpt-commits
mailing list