/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* camelMimePart.c : Abstract class for a mime_part */ /* * * Copyright (C) 1999 Bertrand Guiheneuf . * * 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 */ #include #include "camel-mime-part.h" #include #include "gmime-content-field.h" #include "gstring-util.h" #include "camel-log.h" #include "gmime-utils.h" typedef enum { HEADER_UNKNOWN, HEADER_DESCRIPTION, HEADER_DISPOSITION, HEADER_CONTENT_ID, HEADER_ENCODING, HEADER_CONTENT_MD5, HEADER_CONTENT_LANGUAGES, HEADER_CONTENT_TYPE } CamelHeaderType; static GHashTable *header_name_table; static CamelDataWrapperClass *parent_class=NULL; /* Returns the class for a CamelMimePart */ #define CMP_CLASS(so) CAMEL_MIME_PART_CLASS (GTK_OBJECT(so)->klass) static void _add_header (CamelMimePart *mime_part, GString *header_name, GString *header_value); static void _remove_header (CamelMimePart *mime_part, GString *header_name); static GString *_get_header (CamelMimePart *mime_part, GString *header_name); static void _set_description (CamelMimePart *mime_part, GString *description); static GString *_get_description (CamelMimePart *mime_part); static void _set_disposition (CamelMimePart *mime_part, GString *disposition); static GString *_get_disposition (CamelMimePart *mime_part); static void _set_filename (CamelMimePart *mime_part, GString *filename); static GString *_get_filename (CamelMimePart *mime_part); static void _set_content_id (CamelMimePart *mime_part, GString *content_id); static GString *_get_content_id (CamelMimePart *mime_part); static void _set_content_MD5 (CamelMimePart *mime_part, GString *content_MD5); static GString *_get_content_MD5 (CamelMimePart *mime_part); static void _set_encoding (CamelMimePart *mime_part, GString *encoding); static GString *_get_encoding (CamelMimePart *mime_part); static void _set_content_languages (CamelMimePart *mime_part, GList *content_languages); static GList *_get_content_languages (CamelMimePart *mime_part); static void _set_header_lines (CamelMimePart *mime_part, GList *header_lines); static GList *_get_header_lines (CamelMimePart *mime_part); static void _set_content_type (CamelMimePart *mime_part, GString *content_type); static GString *_get_content_type (CamelMimePart *mime_part); static CamelDataWrapper *_get_content_object(CamelMimePart *mime_part); static void _write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream); static gboolean _parse_header_pair (CamelMimePart *mime_part, GString *header_name, GString *header_value); void _construct_from_stream (CamelDataWrapper *data_wrapper, CamelStream *stream); /* loads in a hash table the set of header names we */ /* recognize and associate them with a unique enum */ /* identifier (see CamelHeaderType above) */ static void _init_header_name_table() { header_name_table = g_hash_table_new (g_string_hash, g_string_equal_for_hash); g_hash_table_insert (header_name_table, g_string_new ("Content-Description"), (gpointer)HEADER_DESCRIPTION); g_hash_table_insert (header_name_table, g_string_new ("Content-Disposition"), (gpointer)HEADER_DISPOSITION); g_hash_table_insert (header_name_table, g_string_new ("Content-id"), (gpointer)HEADER_CONTENT_ID); g_hash_table_insert (header_name_table, g_string_new ("Content-Transfer-Encoding"), (gpointer)HEADER_ENCODING); g_hash_table_insert (header_name_table, g_string_new ("Content-MD5"), (gpointer)HEADER_CONTENT_MD5); g_hash_table_insert (header_name_table, g_string_new ("Content-Type"), (gpointer)HEADER_CONTENT_TYPE); } static void camel_mime_part_class_init (CamelMimePartClass *camel_mime_part_class) { CamelDataWrapperClass *camel_data_wrapper_class = CAMEL_DATA_WRAPPER_CLASS (camel_mime_part_class); parent_class = gtk_type_class (camel_data_wrapper_get_type ()); _init_header_name_table(); /* virtual method definition */ camel_mime_part_class->add_header = _add_header; camel_mime_part_class->remove_header = _remove_header; camel_mime_part_class->get_header = _get_header; camel_mime_part_class->set_description = _set_description; camel_mime_part_class->get_description = _get_description; camel_mime_part_class->set_disposition = _set_disposition; camel_mime_part_class->get_disposition = _get_disposition; camel_mime_part_class->set_filename = _set_filename; camel_mime_part_class->get_filename = _get_filename; camel_mime_part_class->set_content_id = _set_content_id; camel_mime_part_class->get_content_id = _get_content_id; camel_mime_part_class->set_content_MD5 =_set_content_MD5; camel_mime_part_class->get_content_MD5 = _get_content_MD5; camel_mime_part_class->set_encoding = _set_encoding; camel_mime_part_class->get_encoding = _get_encoding; camel_mime_part_class->set_content_languages = _set_content_languages; camel_mime_part_class->get_content_languages = _get_content_languages; camel_mime_part_class->set_header_lines =_set_header_lines; camel_mime_part_class->get_header_lines =_get_header_lines; camel_mime_part_class->set_content_type = _set_content_type; camel_mime_part_class->get_content_type = _get_content_type; camel_mime_part_class->parse_header_pair = _parse_header_pair; camel_mime_part_class->get_content_object = _get_content_object; /* virtual method overload */ camel_data_wrapper_class->write_to_stream = _write_to_stream; camel_data_wrapper_class->construct_from_stream = _construct_from_stream; } static void camel_mime_part_init (gpointer object, gpointer klass) { CamelMimePart *camel_mime_part = CAMEL_MIME_PART (object); camel_mime_part->headers = g_hash_table_new (g_string_hash, g_string_equal_for_hash); camel_mime_part->content_type = gmime_content_field_new (NULL, NULL); } GtkType camel_mime_part_get_type (void) { static GtkType camel_mime_part_type = 0; if (!camel_mime_part_type) { GtkTypeInfo camel_mime_part_info = { "CamelMimePart", sizeof (CamelMimePart), sizeof (CamelMimePartClass), (GtkClassInitFunc) camel_mime_part_class_init, (GtkObjectInitFunc) camel_mime_part_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; camel_mime_part_type = gtk_type_unique (camel_data_wrapper_get_type (), &camel_mime_part_info); } return camel_mime_part_type; } static void _add_header (CamelMimePart *mime_part, GString *header_name, GString *header_value) { gboolean header_exists; GString *old_header_name; GString *old_header_value; /* Try to parse the header pair. If it corresponds to something */ /* known, the job is done in the parsing routine. If not, */ /* we simply add the header in a raw fashion */ if (CMP_CLASS(mime_part)->parse_header_pair (mime_part, header_name, header_value)) return; header_exists = g_hash_table_lookup_extended (mime_part->headers, header_name, (gpointer *) &old_header_name, (gpointer *) &old_header_value); if (header_exists) { g_string_free (old_header_name, TRUE); g_string_free (old_header_value, TRUE); } g_hash_table_insert (mime_part->headers, header_name, header_value); } void camel_mime_part_add_header (CamelMimePart *mime_part, GString *header_name, GString *header_value) { CMP_CLASS(mime_part)->add_header(mime_part, header_name, header_value); } static void _remove_header (CamelMimePart *mime_part, GString *header_name) { gboolean header_exists; GString *old_header_name; GString *old_header_value; header_exists = g_hash_table_lookup_extended (mime_part->headers, header_name, (gpointer *) &old_header_name, (gpointer *) &old_header_value); if (header_exists) { g_string_free (old_header_name, TRUE); g_string_free (old_header_value, TRUE); } g_hash_table_remove (mime_part->headers, header_name); } void camel_mime_part_remove_header (CamelMimePart *mime_part, GString *header_name) { CMP_CLASS(mime_part)->remove_header(mime_part, header_name); } static GString * _get_header (CamelMimePart *mime_part, GString *header_name) { GString *old_header_name; GString *old_header_value; GString *header_value; header_value = (GString *)g_hash_table_lookup (mime_part->headers, header_name); return header_value; } GString * camel_mime_part_get_header (CamelMimePart *mime_part, GString *header_name) { return CMP_CLASS(mime_part)->get_header (mime_part, header_name); } static void _set_description (CamelMimePart *mime_part, GString *description) { if (mime_part->description) g_free(mime_part->description); mime_part->description = description; } void camel_mime_part_set_description (CamelMimePart *mime_part, GString *description) { CMP_CLASS(mime_part)->set_description (mime_part, description); } static GString * _get_description (CamelMimePart *mime_part) { return mime_part->description; } GString * camel_mime_part_get_description (CamelMimePart *mime_part) { return CMP_CLASS(mime_part)->get_description (mime_part); } static void _set_disposition (CamelMimePart *mime_part, GString *disposition) { //if (mime_part->disposition) g_free(mime_part->disposition); if (!mime_part->disposition) mime_part->disposition = g_new (GMimeContentField,1); if ((mime_part->disposition)->type) g_free ((mime_part->disposition)->type); (mime_part->disposition)->type = disposition; } void camel_mime_part_set_disposition (CamelMimePart *mime_part, GString *disposition) { CMP_CLASS(mime_part)->set_disposition (mime_part, disposition); } static GString * _get_disposition (CamelMimePart *mime_part) { if (!mime_part->disposition) return NULL; return (mime_part->disposition)->type; } GString * camel_mime_part_get_disposition (CamelMimePart *mime_part) { return CMP_CLASS(mime_part)->get_disposition (mime_part); } static void _set_filename (CamelMimePart *mime_part, GString *filename) { if (mime_part->filename) g_free(mime_part->filename); mime_part->filename = filename; } void camel_mime_part_set_filename (CamelMimePart *mime_part, GString *filename) { CMP_CLASS(mime_part)->set_filename (mime_part, filename); } static GString * _get_filename (CamelMimePart *mime_part) { return mime_part->filename; } GString * camel_mime_part_get_filename (CamelMimePart *mime_part) { return CMP_CLASS(mime_part)->get_filename (mime_part); } /* this routine must not be public */ static void _set_content_id (CamelMimePart *mime_part, GString *content_id) { if (mime_part->content_id) g_free(mime_part->content_id); mime_part->content_id = content_id; } static GString * _get_content_id (CamelMimePart *mime_part) { return mime_part->content_id; } GString * camel_mime_part_get_content_id (CamelMimePart *mime_part) { return CMP_CLASS(mime_part)->get_content_id (mime_part); } /* this routine must not be public */ static void _set_content_MD5 (CamelMimePart *mime_part, GString *content_MD5) { if (mime_part->content_MD5) g_free(mime_part->content_MD5); mime_part->content_MD5 = content_MD5; } static GString * _get_content_MD5 (CamelMimePart *mime_part) { return mime_part->content_MD5; } GString * camel_mime_part_get_content_MD5 (CamelMimePart *mime_part) { return CMP_CLASS(mime_part)->get_content_MD5 (mime_part); } static void _set_encoding (CamelMimePart *mime_part, GString *encoding) { if (mime_part->encoding) g_free(mime_part->encoding); mime_part->encoding = encoding; } void camel_mime_part_set_encoding (CamelMimePart *mime_part, GString *encoding) { CMP_CLASS(mime_part)->set_encoding (mime_part, encoding); } static GString * _get_encoding (CamelMimePart *mime_part) { return mime_part->encoding; } GString * camel_mime_part_get_encoding (CamelMimePart *mime_part) { return CMP_CLASS(mime_part)->get_encoding (mime_part); } static void _set_content_languages (CamelMimePart *mime_part, GList *content_languages) { if (mime_part->content_languages) g_string_list_free(mime_part->content_languages); mime_part->content_languages = content_languages; } void camel_mime_part_set_content_languages (CamelMimePart *mime_part, GList *content_languages) { CMP_CLASS(mime_part)->set_content_languages (mime_part, content_languages); } static GList * _get_content_languages (CamelMimePart *mime_part) { return mime_part->content_languages; } GList * camel_mime_part_get_content_languages (CamelMimePart *mime_part) { return CMP_CLASS(mime_part)->get_content_languages (mime_part); } static void _set_header_lines (CamelMimePart *mime_part, GList *header_lines) { if (mime_part->header_lines) g_string_list_free(mime_part->header_lines); mime_part->header_lines = header_lines; } void camel_mime_part_set_header_lines (CamelMimePart *mime_part, GList *header_lines) { CMP_CLASS(mime_part)->set_header_lines (mime_part, header_lines); } static GList * _get_header_lines (CamelMimePart *mime_part) { return mime_part->header_lines; } GList * camel_mime_part_get_header_lines (CamelMimePart *mime_part) { return CMP_CLASS(mime_part)->get_header_lines (mime_part); } /*********/ static void _set_content_type (CamelMimePart *mime_part, GString *content_type) { g_assert (content_type); gmime_content_field_construct_from_string (mime_part->content_type, content_type); } void camel_mime_part_set_mime_type (CamelMimePart *mime_part, GString *content_type) { CMP_CLASS(mime_part)->set_content_type (mime_part, content_type); } static GString * _get_content_type (CamelMimePart *mime_part) { GString *mime_type; mime_type = gmime_content_field_get_mime_type (mime_part->content_type); return mime_type; } static GString * camel_mime_part_get_content_type (CamelMimePart *mime_part) { return CMP_CLASS(mime_part)->get_content_type (mime_part); } /*********/ static CamelDataWrapper * _get_content_object(CamelMimePart *mime_part) { return mime_part->content; } CamelDataWrapper * camel_mime_part_get_content_object(CamelMimePart *mime_part) { return CMP_CLASS(mime_part)->get_content_object (mime_part); } /**********************************************************************/ #ifdef WHPT #warning : WHPT is already defined !!!!!! #endif #define WHPT gmime_write_header_pair_to_stream /* This is not used for the moment */ static void _write_content_to_stream (CamelMimePart *mime_part, CamelStream *stream) { guint buffer_size; gchar *buffer; gchar *encoded_buffer; CamelDataWrapper *content = mime_part->content; // buffer_size = camel_data_wrapper_size (content); buffer = g_malloc (buffer_size); camel_data_wrapper_write_to_stream (content, stream); if (mime_part->encoding) { // encoded_buffer_size = gmime_encoded_size(buffer, buffer_size, encoding); // encoded_buffer = g_malloc (encoded_buffer_size); // gmime_encode_buffer (buffer, encoded_buffer, encoding); // camel_stream_write (stream, encoded_buffer, encoded_buffer_size); // g_free (encoded_buffer); } else //fwrite (buffer, buffer_size, 1, file); camel_stream_write (stream, buffer, buffer_size); g_free (buffer); } static void _write_to_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) { CamelMimePart *mp = CAMEL_MIME_PART (data_wrapper); CAMEL_LOG (FULL_DEBUG, "Entering CamelMimePart::write_to_stream\n"); CAMEL_LOG (FULL_DEBUG, "CamelMimePart::write_to_stream writing content-disposition\n"); gmime_content_field_write_to_stream(mp->disposition, stream); CAMEL_LOG (FULL_DEBUG, "CamelMimePart::write_to_stream writing content-transfer-encoding\n"); WHPT (stream, "Content-Transfer-Encoding", mp->encoding); CAMEL_LOG (FULL_DEBUG, "CamelMimePart::write_to_stream writing content-description\n"); WHPT (stream, "Content-Description", mp->description); CAMEL_LOG (FULL_DEBUG, "CamelMimePart::write_to_stream writing content-MD5\n"); WHPT (stream, "Content-MD5", mp->content_MD5); CAMEL_LOG (FULL_DEBUG, "CamelMimePart::write_to_stream writing content-id\n"); WHPT (stream, "Content-id", mp->content_id); CAMEL_LOG (FULL_DEBUG, "CamelMimePart::write_to_stream writing content-languages\n"); write_header_with_glist_to_stream (stream, "Content-Language", mp->content_languages,", "); CAMEL_LOG (FULL_DEBUG, "CamelMimePart::write_to_stream writing other headers\n"); write_header_table_to_stream (stream, mp->headers); CAMEL_LOG (FULL_DEBUG, "CamelMimePart::write_to_stream writing content-type\n"); gmime_content_field_write_to_stream(mp->content_type, stream); camel_stream_write_string(stream,"\n"); if (mp->content) camel_data_wrapper_write_to_stream (mp->content, stream); } /*******************************/ /* mime part parsing */ static gboolean _parse_header_pair (CamelMimePart *mime_part, GString *header_name, GString *header_value) { CamelHeaderType header_type; gboolean header_handled = FALSE; header_type = (CamelHeaderType) g_hash_table_lookup (header_name_table, header_name); switch (header_type) { case HEADER_DESCRIPTION: CAMEL_LOG (FULL_DEBUG, "CamelMimePart::parse_header_pair found HEADER_DESCRIPTION: %s\n", header_value->str ); camel_mime_part_set_description (mime_part, header_value); header_handled = TRUE; break; case HEADER_DISPOSITION: CAMEL_LOG (FULL_DEBUG, "CamelMimePart::parse_header_pair found HEADER_DISPOSITION: %s\n", header_value->str ); camel_mime_part_set_disposition (mime_part, header_value); header_handled = TRUE; break; case HEADER_CONTENT_ID: CAMEL_LOG (FULL_DEBUG, "CamelMimePart::parse_header_pair found HEADER_CONTENT_ID: %s\n", header_value->str ); CMP_CLASS(mime_part)->set_content_id (mime_part, header_value); header_handled = TRUE; break; case HEADER_ENCODING: CAMEL_LOG (FULL_DEBUG, "CamelMimePart::parse_header_pair found HEADER_ENCODING: %s\n", header_value->str ); camel_mime_part_set_encoding (mime_part, header_value); header_handled = TRUE; break; case HEADER_CONTENT_MD5: CAMEL_LOG (FULL_DEBUG, "CamelMimePart::parse_header_pair found HEADER_CONTENT_MD5: %s\n", header_value->str ); CMP_CLASS(mime_part)->set_content_MD5 (mime_part, header_value); header_handled = TRUE; break; case HEADER_CONTENT_TYPE: CAMEL_LOG (FULL_DEBUG, "CamelMimePart::parse_header_pair found HEADER_CONTENT_TYPE: %s\n", header_value->str ); gmime_content_field_construct_from_string (mime_part->content_type, header_value); header_handled = TRUE; break; } if (header_handled) { g_string_free (header_name, TRUE); return TRUE; } else return FALSE; } /* calls _parse_header_pair, but can be called in a g_hash_table_for_each */ void _parse_hash_table_pair (gpointer key, gpointer value, gpointer user_data) { GString *header_name = (GString *)key; GString *header_value = (GString *)value; CamelMimePart *mime_part = (CamelMimePart *) user_data; CAMEL_LOG (FULL_DEBUG,"\n--------- New Header ----------\n"); if ((header_name) && (header_name->str)) CAMEL_LOG (FULL_DEBUG, "header name :%s\n", header_name->str); if ((header_value) && (header_value->str)) CAMEL_LOG (FULL_DEBUG, "header value :%s\n", header_value->str); camel_mime_part_add_header (mime_part, header_name, header_value); CAMEL_LOG (FULL_DEBUG, "--------- End -----------------\n"); } void _construct_from_stream (CamelDataWrapper *data_wrapper, CamelStream *stream) { GHashTable *header_table; CamelMimePart *mime_part = CAMEL_MIME_PART (data_wrapper); header_table = get_header_table_from_stream (stream); if (header_table) { g_hash_table_foreach (header_table, _parse_hash_table_pair, (gpointer)mime_part); } g_hash_table_destroy (header_table); } configure scripts in regards to finding X libs onwill2000-10-293-9/+9 * Update to PIB 1.2, which fixes the reported issues so far with the newmsmith2000-10-282-2/+2 * Add gtoaster 200009260, a GTK frontend for cdrecord.will2000-10-286-0/+51 * Update message to note that as of release 5.5, NetWorker servers havemjacob2000-10-271-0/+8 * add secondary ftp sitemjacob2000-10-271-1/+2 * Stop make configure from blowing up on systems without IPv6jeh2000-10-261-1/+7 * ComplexProgramTarget() -> ComplexProgramTargetNoMan()asami2000-10-251-0/+8 * Update to QT 2.2.1 / KDE 2.0 final release. At last! What a long road...will2000-10-259-267/+132 * Add USE_GMAKE.will2000-10-251-0/+1 * Mikhail Teterin <mi@aldan.algebra.com> in PR 22258 showed me a morejeh2000-10-242-5/+7 * Add pkg_tarup, which generates binary package from installed package.knu2000-10-226-0/+104 * Update to version 0.6.1jeh2000-10-223-7/+26 * Update to 1.0.1.ume2000-10-206-26/+18 * Update to version 0.1.36kevlo2000-10-162-2/+2 * Update to version 0.44.1bp2000-10-1610-60/+44 * Fix a type, you -> your.steve2000-10-164-4/+4 * BUILD_DEPENDS -> LIB_DEPENDSade2000-10-144-40/+84 * Support PREFIX properlyade2000-10-142-5/+5 * Update to 1.0.0.ume2000-10-146-42/+22 * Upgrade to LPRng 3.6.25 to fix remote root vulnerability.kris2000-10-133-3/+4 * Mark FORBIDDEN: remote root vulnerabilitykris2000-10-114-0/+8 * Bump PORTREVISIONache2000-10-111-1/+1 * Use more terminfo-compatible fixache2000-10-111-8/+12 * Update to version 0.1.35kevlo2000-10-102-2/+2 * Change PKGDIR from pkg/ to . Also fix places where ${PKGDIR} isasami2000-10-0811-12/+11 * Rename PLIST.{CGI,DOC} to pkg-plist.{cgi,doc}.asami2000-10-082-6/+6 * Implement WANT_GNOME.reg2000-10-053-33/+24 * Implement USE_GNOME, part 2.reg2000-10-0512-81/+60 * Implement WANT_IMLIB and USE_IMLIB.reg2000-10-054-12/+4 * Implement USE_GTK, part 2.reg2000-10-054-17/+32 * Update to version 1.15jeh2000-10-042-2/+2 * Correct CATEGORIES - make first category in the CATEGORIES list matching parentsobomax2000-10-041-1/+1 * Chase new gconfade2000-10-041-1/+1 * Update to 1.4.7kevlo2000-10-034-4/+4 * Maintainer is now a committer, update email accordinglylioux2000-10-032-2/+2 * Switch maintainership. Old maintainer has disappeared and is notade2000-10-021-1/+1 * Change MAINTAINERship to my committers address.jeh2000-10-021-1/+1 * - update port to last gtar releaseandreas2000-10-015-16/+54 * Update to version 3.1taoka2000-09-273-25/+31 * Now bsd.ruby.mk is automatically included by bsd.port.mk when USE_RUBYknu2000-09-261-3/+1 * Eliminate WRKSRC=${WRKDIR}/${PKGNAME} lines, as these will break whenasami2000-09-251-1/+0 * Update WWW for prips.will2000-09-221-1/+1 * Update WWW for IPSC.will2000-09-221-1/+1 * Support installing to proper PREFIX directory.shige2000-09-211-2/+2 * Don't install a screen -> screen.x.y.z symlink, this will leave behindkris2000-09-213-4/+20 * Follow the softweyr ftp archive, which is moving home.wes2000-09-201-1/+1 * Update to 1.2.2ade2000-09-2012-92/+40 * Correct MD5jedgar2000-09-181-1/+1 * Update to version 4.0ade2000-09-183-11/+22 * Update to version 0.6.0ade2000-09-183-6/+6 * - Update to 0.1g.knu2000-09-164-12/+23 * Add PORTREVISIONache2000-09-161-0/+1 * Workaround buggy ncurses tgoto emulation which affects pseudographicsache2000-09-161-0/+11 * Update to KDE 1.94, the fifth and final beta release of KDE 2.0. If youwill2000-09-169-213/+123 * Update with bsd.ruby.mk. :>knu2000-09-072-22/+15 * Upgrade to 3.9.8ache2000-09-065-24/+62 * Borkage for man page, fixed by PR submitter (thanks!).mjacob2000-09-052-135/+141 * Update to version 3.6.23.steve2000-09-055-100/+318 * Minor tweaks including using our own do-install target.steve2000-09-051-3/+5 * Change GNU_CONFIGURE to USE_AUTOCONF. cfengine comes with a configurefenner2000-09-024-4/+4 * Finish updating to KDE2 snapshot 20000829A. Re-add kdenetwork and kdeutilswill2000-08-309-735/+489 * Upgrade to version 4.51.obrien2000-08-302-4/+4 * Fix several (of course, root-exploitable) buffer overflows.green2000-08-221-0/+86 * USE_LIBTOOL implies GNU_CONFIGURE, so remove redundant GNU_CONFIGURE lines.sobomax2000-08-211-1/+0 * Replace every occurance of scsi_mode_page_header withdirk2000-08-2018-0/+745 * Medusa is software that allows you to quickly search your system forade2000-08-189-0/+105 * Make all these Ruby related ports belong also in the newly-addedknu2000-08-161-1/+1 * Add ruby-syslog, a Ruby module to access syslog(3) interface.knu2000-08-156-0/+54 * Add directories missing in PLISTjedgar2000-08-121-0/+1 * - Support CFLAGS properlykevlo2000-08-124-15/+10 * - Support PREFIX/X11BASE properlykevlo2000-08-123-7/+15 * - Support X11BASE properlykevlo2000-08-124-15/+15 * Make these COMMENT files conform to Handbook standard.will2000-08-111-1/+1 * Add startup script.will2000-08-114-0/+54 * @dirrm include/gkrellmasami2000-08-102-0/+2 * Activate battstat-appletjim2000-08-101-0/+1 * Import of battstat-applet.jim2000-08-105-0/+55 * Respect CFLAGS properlyjedgar2000-08-102-4/+16 * Move distfile to MASTER_SITE_LOCAL/nsayernsayer2000-08-091-1/+2 * Use gd.1 in the LIB_DEPENDS so this port doesn't accidently pickup thesteve2000-08-082-2/+2 * Add 'LDFLAGS+=-lio' on the Alpha for the implementations of inb/outb.steve2000-08-082-0/+24 * Add 'LDFLAGS+=-lio' on the Alpha for the inb/outb implementations.steve2000-08-081-3/+20 * Don't try to use fpresetsticky(3) on the Alpha as it doesn't exist there.steve2000-08-083-18/+24 * Add 'LDFLAGS+=-lio' for the implementations of inb/outb on the Alpha.steve2000-08-081-0/+11 * Update to 0.10.5.ume2000-08-074-4/+4 * Re-sobomize to use pre-patch instead of post-extractade2000-08-057-7/+7 * Sobomized.sobomax2000-08-042-6/+15 * Extensive patchfile cleanups using sobomax's wonderfulade2000-08-043-0/+21 * Update to 1.2.1ade2000-08-0416-136/+152 * (1) Add new variable, XFREE86_VERSION, to specify which version ofasami2000-08-0319-42/+25 * USE_X_PREFIX should be before bsd.port.pre.mk include.asami2000-08-031-1/+2 * Re-add grub in sysutils, it having previously removed from misc..nbm2000-08-027-0/+66 * Update to version 1.31kevlo2000-08-024-5/+5 * Upgrade to 1.9.dirk2000-07-319-15/+15 * Upgrade to 1.13:dirk2000-07-314-30/+24 * Add secondary site to MASTER_SITES.kevlo2000-07-301-1/+2 * Update to version 1.3kevlo2000-07-302-3/+4 * Fix the MASTER_SITE to the canonical locations.nbm2000-07-301-2/+3 * Add the ftp version of the MASTER_SITE, since it is available.nbm2000-07-301-1/+2 * Update to version 1.4.5kevlo2000-07-254-4/+4 * Add pwgen 1.15, a password generator with various options which influencealex2000-07-2313-0/+101 * Correct broken master site for cpdupdillon2000-07-221-1/+1 * Mark these BROKEN, they don't compile/run properly.asami2000-07-203-0/+6 * Change my address in MAINTAINER.dannyboy2000-07-192-2/+2 * Add memtest 2.93.1, a utility to test for faulty memory subsystem.alex2000-07-198-0/+61 * This finally is the version which is in the base system.alex2000-07-192-3/+7 * Update port to 0.0.6jedgar2000-07-195-12/+39 * Update to work with 4.x's new VM system.alex2000-07-192-33/+86 * - Update to 0.5.4kevlo2000-07-182-3/+3 * Upgrade to version 0.44.0bp2000-07-1810-82/+138 * Update to 1.0.sobomax2000-07-174-20/+20 * Update to support 4.1-RELEASE.obrien2000-07-172-4/+8 * GKrellM's archive was changed.ume2000-07-162-2/+2 * Update to 0.80andreas2000-07-163-42/+1002 * Activate GNU fileutils.sada2000-07-161-0/+1 * Ports of GNU file-utilities.sada2000-07-166-0/+122 * Update port to 0.5.3jedgar2000-07-142-4/+2 * Update to version 1.45kevlo2000-07-122-3/+4 * Update to 1.0.9ade2000-07-129-6/+9 * Update for new devel/libglade shlib versionade2000-07-121-1/+1 * Update to version 0.5.2kevlo2000-07-113-7/+11 * Update to 0.10.4ume2000-07-114-4/+4 * Update to 1.0b2kevlo2000-07-117-29/+112 * ben@scientia.demon.co.uk -> ben@FreeBSD.org, since I'm a committer now.ben2000-07-112-2/+2 * Update to 2.9.sobomax2000-07-102-2/+2 * Oops, nuke unnecessary change introduced by previous commit.ume2000-07-102-4/+0 * Update to 0.10.3ume2000-07-108-18/+32 * Put the stow port in the correct order.steve2000-07-101-1/+1 * Add stow version 1.3.2.steve2000-07-107-0/+60 * Update to version 1.88.steve2000-07-103-31/+6 * - Fix MASTER_SITESsteve2000-07-102-12/+8 * move the distfile to my puny 128kbps DSL line.jmg2000-07-081-4/+1 * * Update WWW and MASTER_SITES to reflect the rearrangement of myjedgar2000-07-085-9/+9 * The providers of the T-1 to www.freebsd.org does not want the haveobrien2000-07-081-1/+2 * Update to version 0.5.1.steve2000-07-082-2/+5 * back out obrien's breakage of my port as he didn't pass this throughjmg2000-07-081-2/+1 * Update to 1.2, which removes some debugging information.will2000-07-082-2/+2 * Update to version 1.13.steve2000-07-083-2/+4 * Add clockspeed - a program which uses a hardware tick counter to compensatesobomax2000-07-0710-0/+238 * Update to 0.4b.sobomax2000-07-072-15/+12 * activate xwipowersumikawa2000-07-051-0/+1 * Xwipower is the wave power level meter for wi(4). It also has a battrysumikawa2000-07-056-0/+56 * As threatened on freebsd-ports: all startup scripts know about the twotg2000-07-056-13/+60 * Update to 1.9.sobomax2000-07-043-24/+28 * Update to 0.10.2ume2000-07-034-4/+4 * Update to 1.1.sobomax2000-07-032-3/+3 * Remove extraneous directory on deinstallkris2000-07-031-0/+1 * Remove extraneous files and directories on deinstallkris2000-07-031-0/+8 * Missed one more directorykris2000-07-032-0/+2 * Remove extraneous directories on deinstallkris2000-07-032-0/+4 * Update to version 2.0, the version which might join the tree in CURRENT.alex2000-07-022-2/+5 * Update to 1.4.4.will2000-07-026-6/+6 * Update to 0.10.1.ume2000-07-014-4/+4 * o Turn off the build of xcdrdao:motoyuki2000-06-303-29/+43 * Activate truncatealex2000-06-301-0/+1 * Initial import of truncate, a command-line fronted to truncate(2).alex2000-06-305-0/+23 * Update to 0.6.sobomax2000-06-304-9/+20 * Update to version 4.50 release.obrien2000-06-302-4/+3 * Move the stragler's www.freebsd.org/~user distfiles to the officalobrien2000-06-298-8/+16 * Use ${MASTER_SITE_LOCAL}.asami2000-06-291-1/+2 * Update to version 1.1, which fixes a bug.alex2000-06-272-2/+2 * According to ade's announcement replace gnomecore RUN_DEPENDS with gnomeccsobomax2000-06-271-1/+1 * Make directories for plugins and themes at GKrellM's install.ume2000-06-274-0/+16 * Author has fixed a problem where file size and offsets were casted to aobrien2000-06-262-3/+3 * - Use MASTER_SITE_WINDOWMAKER to MASTER_SITESsobomax2000-06-231-6/+7 * - Use MASTER_SITE_AFTERSTEP to MASTER_SITESsobomax2000-06-234-11/+8 * Add gnomelibs to the RUN_DEPENDS to ensure correct removal of share/gnome/*sobomax2000-06-231-0/+1 * Update to 0.10.0.ume2000-06-2310-30/+46 * Activate fontedit.sobomax2000-06-221-0/+1 * Initial import of fontedit - a two symple tools to create and edit syscons fo...sobomax2000-06-225-0/+28 * Add a sample rc file for svscan startup, in partial fulfillment of thenbm2000-06-222-0/+47 * Unleash all of these ports upon the people. I no longer have any interestwill2000-06-221-1/+1 * Forgot to move this patch, which adds color support. We use proper makewill2000-06-221-0/+41 * Update to 0.5.will2000-06-223-4/+7 * Activate whowatch.sobomax2000-06-211-0/+1 * Initial import of whowatch - a small program which displays in real time infosobomax2000-06-216-0/+45 * Update to the 0.2.0 version. Also make it use BSD_INSTALL_* macros and makesobomax2000-06-204-19/+32 * Update to the 0.5 version.sobomax2000-06-203-3/+16 * Update to version 354.will2000-06-202-12/+13 * Use ${MASTER_SITE_LOCAL} instead of hard coded location.ume2000-06-192-2/+4 * Lots and lots of cleanups. Teach p5-* in general about PKGNAMEPREFIX.will2000-06-171-3/+3 * Rename INSTALLS_SHLIBS to INSTALLS_SHLIB. (There was a typo in theasami2000-06-177-7/+7 * Final round of the INSTALLS_SHLIBS=yes conversion. Few remaining ports withsobomax2000-06-168-8/+4 * Fourth round of INSTALLS_SHLIBS conversion.sobomax2000-06-166-6/+3 * Add bin/apple_driver.dirk2000-06-162-0/+2 * Teach MASTER_SITES about new MASTER_SITE_SOURCEFORGE.sobomax2000-06-142-2/+4 * Vendor fix for building on the latest 5-CURRENT.obrien2000-06-132-3/+3 * Move distfile to local-distfiles directory on ftp.FreeBSD.orgjmz2000-06-121-1/+1 * Use the correct number of interrupts on the Alpha.obrien2000-06-113-0/+102 * Change the permissions of the binary to setuid so it can get thewill2000-06-101-0/+3 * Add monitord, a simple service monitoring daemon that restarts a servicewill2000-06-107-0/+45 * Another dependency missed in package building.ade2000-06-093-3/+6 * Move my distfiles to ftp.freebsd.org local distfiles site.ume2000-06-092-2/+2 * Add chm.8 as a "maybe" compressed manpage.asami2000-06-081-0/+2 * Update to 0.2. Remove useless WWW.will2000-06-08