+Changes in 3.0 beta2
+====================
+* UPD: Solaris and friends: Replace initscript with SMF manifest
+
Changes in 3.0 beta1
====================
* UPD: afpd: Performance tuning of read/write AFP operations. New option
service.systemd
netatalk
netatalk.service
-.gitignore
+netatalk.xml
*.o
rc.redhat \
rc.solaris \
rc.suse \
- service.systemd
+ service.systemd \
+ netatalk.xml
TEMPLATES = \
rc.bsd.tmpl \
rc.redhat.tmpl \
rc.solaris.tmpl \
rc.suse.tmpl \
- service.systemd.tmpl
+ service.systemd.tmpl \
+ netatalk.xml.tmpl
CLEANFILES = $(GENERATED_FILES) $(sysv_SCRIPTS) $(service_DATA) afpd cnid_metad
EXTRA_DIST = $(TEMPLATES)
if USE_SOLARIS
-sysvdir = /etc/init.d
-sysv_SCRIPTS = netatalk
-
-$(sysv_SCRIPTS): rc.solaris
- cp -f rc.solaris $@
- chmod a+x $@
+servicedir = /lib/svc/manifest/network/
+service_DATA = netatalk.xml
install-data-hook:
- rm -f $(DESTDIR)/etc/rc2.d/S90$(sysv_SCRIPTS)
- -ln -s ../init.d/$(sysv_SCRIPTS) $(DESTDIR)/etc/rc2.d/S90$(sysv_SCRIPTS)
- rm -f $(DESTDIR)/etc/rc0.d/K04$(sysv_SCRIPTS)
- -ln -s ../init.d/$(sysv_SCRIPTS) $(DESTDIR)/etc/rc0.d/K04$(sysv_SCRIPTS)
+ svccfg import netatalk.xml
uninstall-startup:
- rm -f $(DESTDIR)$(sysvdir)/$(sysv_SCRIPTS) \
- $(DESTDIR)/etc/rc2.d/S90$(sysv_SCRIPTS) \
- $(DESTDIR)/etc/rc0.d/K04$(sysv_SCRIPTS)
+ svccfg delete network/netatalk
endif
--- /dev/null
+<?xml version="1.0"?>
+<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
+<service_bundle type="manifest" name="netatalk">
+
+ <service name="network/netatalk" type="service" version="1">
+
+ <create_default_instance enabled="true"/>
+
+ <single_instance/>
+
+ <dependency name="network" grouping="require_all" restart_on="error" type="service">
+ <service_fmri value="svc:/milestone/network:default"/>
+ </dependency>
+
+ <dependency name="filesystem" grouping="require_all" restart_on="error" type="service">
+ <service_fmri value="svc:/system/filesystem/local"/>
+ </dependency>
+
+ <method_context>
+ </method_context>
+
+ <exec_method type="method" name="start" exec=":SBINDIR:/netatalk" timeout_seconds="60"/>
+
+ <exec_method type="method" name="stop" exec=":kill" timeout_seconds="60"/>
+
+ <property_group name="startd" type="framework">
+ <propval name="duration" type="astring" value="contract"/>
+ <propval name="ignore_error" type="astring" value="core,signal"/>
+ </property_group>
+
+ <property_group name="application" type="application">
+ <propval name="config_file" type="astring" value=":ETCDIR:/afp.conf"/>
+ </property_group>
+
+ <stability value="Evolving"/>
+
+ <template>
+ <common_name>
+ <loctext xml:lang="C">
+ Netatalk AFP Server
+ </loctext>
+ </common_name>
+ </template>
+
+ </service>
+
+</service_bundle>
of_name(ofork), strerror(errno));
goto afp_read_exit;
}
- dsi_readdone(dsi);
goto afp_read_done;
}
#endif
EC_INIT;
struct stat st;
- LOG(log_debug, logtype_default, "ad_reso_size(\"%s\")", path);
+ if (adflags & ADFLAGS_DIR) {
+ ad->ad_rlen = 0;
+ goto EC_CLEANUP;
+ }
+
+ LOG(log_debug, logtype_default, "ad_reso_size(\"%s\"): BEGIN", path);
#ifdef HAVE_EAFD
ssize_t easz;
EC_NEG1( fstat(ad_reso_fileno(ad), &st) );
ad->ad_rlen = st.st_size;
} else if (ad_meta_fileno(ad) != -1) {
- EC_NEG1( easz = sys_fgetxattr(ad_meta_fileno(ad), AD_EA_RESO, NULL, 0) );
- ad->ad_rlen = easz;
+ EC_NEG1( (ad->ad_rlen = sys_fgetxattr(ad_meta_fileno(ad), AD_EA_RESO, NULL, 0)) );
} else {
- EC_FAIL;
+ EC_NEG1( (ad->ad_rlen = sys_lgetxattr(path, AD_EA_RESO, NULL, 0)) );
}
#else
return dir->d_fd;
}
#endif
+
+#ifndef HAVE_STRNLEN
+size_t strnlen(const char *s, size_t max)
+{
+ size_t len;
+
+ for (len = 0; len < max; len++) {
+ if (s[len] == '\0') {
+ break;
+ }
+ }
+ return len;
+}
+#endif
AC_DEFUN([AC_NETATALK_CRACKLIB], [
netatalk_cv_with_cracklib=no
AC_ARG_WITH(cracklib,
- [ --with-cracklib=DICT enable/set location of cracklib dictionary],[
+ [ --with-cracklib[[=DICT]] enable/set location of cracklib dictionary [[no]]],[
if test "x$withval" != "xno" ; then
cracklib="$withval"
AC_CHECK_LIB(crack, main, [